diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2022-11-06 23:20:09 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2022-11-06 23:20:09 -0800 |
commit | bd225c6532dcc0d4fa7cb4d21444105d6d23771d (patch) | |
tree | 266630a20b469a3277e596eac6f5afad6430ac0a /adenosine-pds/src/repo.rs | |
parent | 388d4c004146865161e2661fb63c705e7f097f3a (diff) | |
download | adenosine-bd225c6532dcc0d4fa7cb4d21444105d6d23771d.tar.gz adenosine-bd225c6532dcc0d4fa7cb4d21444105d6d23771d.zip |
pds: refactor to use higher-level repo mutation code path
Diffstat (limited to 'adenosine-pds/src/repo.rs')
-rw-r--r-- | adenosine-pds/src/repo.rs | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/adenosine-pds/src/repo.rs b/adenosine-pds/src/repo.rs index ad9aade..1bfc581 100644 --- a/adenosine-pds/src/repo.rs +++ b/adenosine-pds/src/repo.rs @@ -1,5 +1,5 @@ -use crate::load_car_to_blockstore; use crate::mst::{collect_mst_keys, generate_mst, CommitNode, MetadataNode, RootNode}; +use crate::{load_car_to_blockstore, KeyPair}; use adenosine_cli::identifiers::{Did, Nsid, Tid}; use anyhow::{anyhow, ensure, Context, Result}; use ipfs_sqlite_block_store::BlockStore; @@ -235,6 +235,29 @@ impl RepoStore { Ok(mst_cid) } + /// High-level helper to write a batch of mutations to the repo corresponding to the DID, and + /// signing the resulting new root CID with the given keypair. + pub fn mutate_repo( + &mut self, + did: &Did, + mutations: &[Mutation], + signing_key: &KeyPair, + ) -> Result<Cid> { + let commit_cid = self.lookup_commit(did)?.unwrap(); + let last_commit = self.get_commit(&commit_cid)?; + let new_mst_cid = self + .update_mst(&last_commit.mst_cid, &mutations) + .context("updating MST in repo")?; + let new_root_cid = self.write_root( + last_commit.meta_cid, + Some(last_commit.commit_cid), + new_mst_cid, + )?; + // TODO: is this how signatures are supposed to work? + let sig = signing_key.sign_bytes(new_root_cid.to_string().as_bytes()); + self.write_commit(&did, new_root_cid, &sig) + } + /// returns the root commit from CAR file pub fn load_car(&mut self, car_path: &PathBuf, alias: &str) -> Result<Cid> { let cid = load_car_to_blockstore(&mut self.db, car_path, alias)?; |