# Nom - Roles DNA ERD, Entry Structures, Validations
###### tags: `Technical Specification`
### Diagram for Links/Paths/Entries
### Entries
#### Named Object Registration Entries
```rust=
pub struct Role {
pub role_name: String,
pub name_hash: EntryHash
}
// this neeeds to be countersigned
pub struct RoleAssignment {
pub role: EntryHash,
pub registration_hash: HoloHash<Dna>,
pub agent_pub_key: AgentPubKey,
}
// this neeeds to be countersigned
pub struct RoleRevocation {
pub role: EntryHash,
pub registration_hash: HoloHash<Dna>,
pub agent_pub_key: AgentPubKey,
}
#[hdk_entry]
// need a better name
struct NamedObjectRegistration {
name: Vec<u8>,
name_type: EntryHash,
name_type_path: Vec<u8>,
namespace: HoloHash<Entry>,
created: Timestamp,
coupon_data: NamedObjecCouponData
}
#[hdk_entry]
struct NamedObjectRegistrationProperties {
registration_hash: EntryHash,
maintainers: Vec<AgentPubKey>, // maintainers of this entry
// roles: Vec<EntryHash>, // list of roles entry active
client_app_authorized_agents: Vec<AgentPubKey> //
named_object_coupons: BtreeMap<u8, NamespaceCouponData>
}
struct NamedObjecCouponData {
serial_number: Vec<u8>,
namespace: HoloHash<EntryHash>,
// This is fetch from the gateway node.
// Which means that whatever "latest" version of
// NameSpaceProperty was fetched from the
// DHT will be used. This can work still in
// case of network partisions but may make buyers
// use older versions (in the perspective of the namespace owner) instead of the new one.
name_type: EntryHash, // NameType spec that is the latest version (display price and ttl)
payment_proof_sig: Signature
}
```