Simplify api commits (#3423)

* simplify api with unspent by commitment

* fix chain tests
This commit is contained in:
Antioch Peverell
2020-08-17 18:19:29 +01:00
committed by GitHub
parent d1b90f89a0
commit 599bf22cfc
6 changed files with 41 additions and 51 deletions
+9 -9
View File
@@ -568,11 +568,14 @@ impl Chain {
}
}
/// Returns Ok(Some(pos)) if output is unspent.
/// Returns Ok(Some((out, pos))) if output is unspent.
/// Returns Ok(None) if output is spent.
/// Returns Err if something went wrong beyond not finding the output.
pub fn get_unspent(&self, output_ref: &OutputIdentifier) -> Result<Option<CommitPos>, Error> {
self.txhashset.read().get_unspent(output_ref)
pub fn get_unspent(
&self,
commit: Commitment,
) -> Result<Option<(OutputIdentifier, CommitPos)>, Error> {
self.txhashset.read().get_unspent(commit)
}
/// Retrieves an unspent output using its PMMR position
@@ -1387,17 +1390,14 @@ impl Chain {
}
/// Gets the block header in which a given output appears in the txhashset.
pub fn get_header_for_output(
&self,
output_ref: &OutputIdentifier,
) -> Result<BlockHeader, Error> {
pub fn get_header_for_output(&self, commit: Commitment) -> Result<BlockHeader, Error> {
let header_pmmr = self.header_pmmr.read();
let txhashset = self.txhashset.read();
let output_pos = match txhashset.get_unspent(output_ref)? {
let (_, pos) = match txhashset.get_unspent(commit)? {
Some(o) => o,
None => return Err(ErrorKind::OutputNotFound.into()),
};
let hash = header_pmmr.get_header_hash_by_height(output_pos.height)?;
let hash = header_pmmr.get_header_hash_by_height(pos.height)?;
Ok(self.get_block_header(&hash)?)
}
+6 -4
View File
@@ -255,15 +255,17 @@ impl TxHashSet {
/// Check if an output is unspent.
/// We look in the index to find the output MMR pos.
/// Then we check the entry in the output MMR and confirm the hash matches.
pub fn get_unspent(&self, output_id: &OutputIdentifier) -> Result<Option<CommitPos>, Error> {
let commit = output_id.commit;
pub fn get_unspent(
&self,
commit: Commitment,
) -> Result<Option<(OutputIdentifier, CommitPos)>, Error> {
match self.commit_index.get_output_pos_height(&commit) {
Ok(Some(pos)) => {
let output_pmmr: ReadonlyPMMR<'_, Output, _> =
ReadonlyPMMR::at(&self.output_pmmr_h.backend, self.output_pmmr_h.last_pos);
if let Some(out) = output_pmmr.get_data(pos.pos) {
if out == *output_id {
Ok(Some(pos))
if out.commitment() == commit {
Ok(Some((out, pos)))
} else {
Ok(None)
}