Skip to content

Commit

Permalink
feat(tezos-contract): simplify build methods for Contract struct
Browse files Browse the repository at this point in the history
  • Loading branch information
RomarQ committed Jun 5, 2023
1 parent ddff357 commit 84e1a71
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 25 deletions.
51 changes: 27 additions & 24 deletions tezos-contract/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ use tezos_operation::operations::{Entrypoint, Parameters, Transaction};
use tezos_rpc::{
client::TezosRpc,
http::Http,
models::{block::BlockId, contract::UnparsingMode},
models::{
block::BlockId,
contract::{ContractScript, UnparsingMode},
},
};

use crate::{utils::AnyAnnotationValue, Error, Result};
Expand Down Expand Up @@ -76,33 +79,16 @@ impl Contract {
&self.storage
}

pub(crate) async fn new<HttpClient: Http>(
client: &TezosRpc<HttpClient>,
pub(crate) fn new(
address: ContractHash,
block_id: Option<&BlockId>,
script: ContractScript,
entrypoints: MappedEntrypoints,
) -> Result<Contract> {
let generic_address: Address = (&address).into();
let mut request = client
.get_contract_script(&generic_address)
.unparsing_mode(UnparsingMode::Optimized_legacy);
if let Some(block_id) = block_id {
request = request.block_id(block_id);
}
let script = request.send().await?;
let parameter: Parameter = script
.code
.values()
.iter()
.nth(0)
.ok_or(Error::InvalidContractScript)?
.clone()
.try_into()?;
let entrypoints = MappedEntrypoints::new(parameter)?;
return Ok(Contract {
Ok(Contract {
address,
storage: Storage::new(script)?,
entrypoints,
});
})
}

pub fn call(
Expand Down Expand Up @@ -478,6 +464,23 @@ impl<HttpClient: Http + Sync> ContractFetcher for TezosRpc<HttpClient> {
address: ContractHash,
block_id: Option<&BlockId>,
) -> Result<Contract> {
Contract::new(self, address, block_id).await
let generic_address: Address = (&address).into();
let mut request = self
.get_contract_script(&generic_address)
.unparsing_mode(UnparsingMode::Optimized_legacy);
if let Some(block_id) = block_id {
request = request.block_id(block_id);
}
let script = request.send().await?;
let parameter: Parameter = script
.code
.values()
.iter()
.nth(0)
.ok_or(Error::InvalidContractScript)?
.clone()
.try_into()?;
let entrypoints = MappedEntrypoints::new(parameter)?;
Contract::new(address, script, entrypoints)
}
}
2 changes: 1 addition & 1 deletion tezos-contract/src/contract/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use tezos_michelson::{
},
MichelinePacker,
};
use tezos_rpc::{client::TezosRpc, http::Http, models::contract::ContractScript};
use tezos_rpc::models::contract::ContractScript;

use crate::{utils::AnyAnnotationValue, Error, Result};

Expand Down

0 comments on commit 84e1a71

Please sign in to comment.