diff --git a/examples/credential-registry/src/lib.rs b/examples/credential-registry/src/lib.rs index ed40f47a..ce84cefd 100644 --- a/examples/credential-registry/src/lib.rs +++ b/examples/credential-registry/src/lib.rs @@ -462,31 +462,42 @@ fn contract_revoke_credeintial( } #[derive(Serial, Deserial, SchemaType)] -pub struct RegisterKeyParameter { +pub struct RegisterPublicKeyParameter { key_index: u8, key: PublicKeyEd25519, } +#[derive(Serialize, SchemaType)] +pub struct RegisterPublicKeyParameters( + #[concordium(size_length = 2)] pub Vec, +); + #[receive( contract = "credential_registry", - name = "registerIssuerKey", - parameter = "RegisterKeyParameter", + name = "registerIssuerKeys", + parameter = "RegisterPublicKeyParameters", error = "ContractError", mutable )] -fn contract_register_issuer_key( +fn contract_register_issuer_keys( ctx: &impl HasReceiveContext, host: &mut impl HasHost, StateApiType = S>, ) -> Result<(), ContractError> { ensure!(sender_is_owner(ctx), ContractError::NotAuthorized); - let parameter: RegisterKeyParameter = ctx.parameter_cursor().get()?; - host.state_mut().register_issuer_key(parameter.key_index, parameter.key) + let RegisterPublicKeyParameters(parameters) = ctx.parameter_cursor().get()?; + for parameter in parameters { + host.state_mut().register_issuer_key(parameter.key_index, parameter.key)?; + } + Ok(()) } +#[derive(Serialize, SchemaType)] +pub struct RemovePublicKeyParameters(#[concordium(size_length = 2)] pub Vec); + #[receive( contract = "credential_registry", - name = "removeIssuerKey", - parameter = "u32", + name = "removeIssuerKeys", + parameter = "RemovePublicKeyParameters", error = "ContractError", mutable )] @@ -495,40 +506,49 @@ fn contract_remove_issuer_key( host: &mut impl HasHost, StateApiType = S>, ) -> Result<(), ContractError> { ensure!(sender_is_owner(ctx), ContractError::NotAuthorized); - let index = ctx.parameter_cursor().get()?; - host.state_mut().remove_issuer_key(index) + let RemovePublicKeyParameters(parameters) = ctx.parameter_cursor().get()?; + for index in parameters { + host.state_mut().remove_issuer_key(index)?; + } + Ok(()) } #[receive( contract = "credential_registry", - name = "registerRevocationKey", - parameter = "RegisterKeyParameter", + name = "registerRevocationKeys", + parameter = "RegisterPublicKeyParameters", error = "ContractError", mutable )] -fn contract_register_revocation_key( +fn contract_register_revocation_keys( ctx: &impl HasReceiveContext, host: &mut impl HasHost, StateApiType = S>, ) -> Result<(), ContractError> { ensure!(sender_is_owner(ctx), ContractError::NotAuthorized); - let parameter: RegisterKeyParameter = ctx.parameter_cursor().get()?; - host.state_mut().register_revocation_key(parameter.key_index, parameter.key) + let RegisterPublicKeyParameters(parameters) = ctx.parameter_cursor().get()?; + for parameter in parameters { + host.state_mut().register_revocation_key(parameter.key_index, parameter.key)?; + } + Ok(()) } #[receive( contract = "credential_registry", - name = "removeRevocationKey", - parameter = "u8", + name = "removeRevocationKeys", + parameter = "RemovePublicKeyParameters", error = "ContractError", mutable )] -fn contract_remove_revocation_key( +fn contract_remove_revocation_keys( ctx: &impl HasReceiveContext, host: &mut impl HasHost, StateApiType = S>, ) -> Result<(), ContractError> { ensure!(sender_is_owner(ctx), ContractError::NotAuthorized); - let index = ctx.parameter_cursor().get()?; - host.state_mut().remove_revocation_key(index) + let RemovePublicKeyParameters(parameters) = ctx.parameter_cursor().get()?; + for index in parameters { + host.state_mut().remove_revocation_key(index)?; + } + Ok(()) } #[receive(