Skip to content

Commit

Permalink
Merge pull request #479 from Concordium/add-from-trait-accountKeys-to…
Browse files Browse the repository at this point in the history
…-accountPublicKeys

Add from trait accountKeys to accountPublicKeys
  • Loading branch information
DOBEN authored Nov 22, 2023
2 parents 151924d + 13c60fd commit 59dc927
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
1 change: 1 addition & 0 deletions rust-src/concordium_base/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## Unreleased changes

- Add `From` trait to convert `AccountKeys` into `AccountPublicKeys`.
- Add `singleton` and `new` function to `AccountAccessStructure`.
- Export `PublicKey`, `SecretKey`, and `Signature` type from `ed25519_dalek` crate.
- Add `sign_message` function to sign a message with all `AccountKeys`. The return type is `AccountSignatures`.
Expand Down
39 changes: 37 additions & 2 deletions rust-src/concordium_base/src/id/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ use byteorder::ReadBytesExt;
use chrono::TimeZone;
use concordium_contracts_common as concordium_std;
pub use concordium_contracts_common::SignatureThreshold;
use concordium_contracts_common::{AccountThreshold, ZeroSignatureThreshold};
use concordium_std::{AccountSignatures, CredentialSignatures, SignatureEd25519};
use concordium_contracts_common::{AccountPublicKeys, AccountThreshold, ZeroSignatureThreshold};
use concordium_std::{AccountSignatures, CredentialSignatures, PublicKeyEd25519, SignatureEd25519};
use derive_more::*;
use ed25519_dalek as ed25519;
use ed25519_dalek::Verifier;
Expand Down Expand Up @@ -2051,6 +2051,41 @@ pub struct AccountKeys {
pub threshold: AccountThreshold,
}

/// From trait to convert `AccountKeys` into `AccountPublicKeys`.
impl From<AccountKeys> for AccountPublicKeys {
fn from(account_keys: AccountKeys) -> Self {
let mut map: BTreeMap<u8, concordium_contracts_common::CredentialPublicKeys> =
BTreeMap::new();

for (credential_index, credential_data) in account_keys.keys {
let mut inner_map: BTreeMap<u8, concordium_contracts_common::PublicKey> =
BTreeMap::new();

for (key_index, public_key) in credential_data.keys {
inner_map.insert(
u8::from(key_index),
concordium_contracts_common::PublicKey::Ed25519(PublicKeyEd25519(
*public_key.public.as_bytes(),
)),
);
}

map.insert(
credential_index.index,
concordium_contracts_common::CredentialPublicKeys {
keys: inner_map,
threshold: credential_data.threshold,
},
);
}

AccountPublicKeys {
keys: map,
threshold: account_keys.threshold,
}
}
}

/// Create account keys with a single credential at index 0
impl From<CredentialData> for AccountKeys {
fn from(cd: CredentialData) -> Self { Self::from((CredentialIndex { index: 0 }, cd)) }
Expand Down

0 comments on commit 59dc927

Please sign in to comment.