WIP: Add ContractFactory

This commit is contained in:
Georgios Konstantopoulos 2020-05-30 17:24:50 +03:00
parent 7a17b2dec2
commit e96446388f
No known key found for this signature in database
GPG Key ID: FA607837CD26EDBC
2 changed files with 46 additions and 0 deletions

View File

@ -0,0 +1,43 @@
use crate::Contract;
use ethers_providers::{networks::Network, JsonRpcClient};
use ethers_signers::{Client, Signer};
use ethers_types::{
abi::{Abi, Tokenize},
Bytes,
};
#[derive(Debug, Clone)]
pub struct ContractFactory<'a, P, N, S> {
client: &'a Client<'a, P, N, S>,
abi: &'a Abi,
bytecode: &'a Bytes,
}
impl<'a, P: JsonRpcClient, N: Network, S: Signer> ContractFactory<'a, P, N, S> {
/// Instantiate a new contract factory
pub fn new(client: &'a Client<'a, P, N, S>, abi: &'a Abi, bytecode: &'a Bytes) -> Self {
Self {
client,
abi,
bytecode,
}
}
/// Deploys an instance of the contract with the provider constructor arguments
/// and returns the contract's instance
pub async fn deploy<T: Tokenize>(
constructor_args: T,
) -> Result<Contract<'a, P, N, S>, P::Error> {
// 1. Encode the constructor args
//
// 2. Create the runtime bytecode by concatenating the bytecode with the constructor
// arguments (?)
//
// 3. Call `client.send_transaction()` to deploy
//
// 4. Get the address of the contract from the transaction receipt
//
// 5. Instantiate & return the contract object
}
}

View File

@ -7,6 +7,9 @@ pub use event::Event;
mod call; mod call;
pub use call::{ContractCall, ContractError}; pub use call::{ContractCall, ContractError};
mod factory;
pub use factory::ContractFactory;
#[cfg(feature = "abigen")] #[cfg(feature = "abigen")]
pub use ethers_contract_abigen::Builder; pub use ethers_contract_abigen::Builder;