...
This commit is contained in:
parent
70c32672de
commit
7d9a6906c6
11
specs/models_heroledger/core/base.v
Normal file
11
specs/models_heroledger/core/base.v
Normal file
@ -0,0 +1,11 @@
|
||||
module core
|
||||
|
||||
// BaseData provides common fields for all models
|
||||
pub struct Base {
|
||||
pub mut:
|
||||
id u32
|
||||
created u64 // Unix timestamp of creation
|
||||
updated u64 // Unix timestamp of last update
|
||||
deleted bool
|
||||
version u32
|
||||
}
|
69
specs/models_heroledger/main/dnsrecord.v
Normal file
69
specs/models_heroledger/main/dnsrecord.v
Normal file
@ -0,0 +1,69 @@
|
||||
module circle
|
||||
|
||||
import freeflowuniverse.herolib.hero.models.core
|
||||
|
||||
|
||||
pub struct DNSZone {
|
||||
core.Base
|
||||
pub mut:
|
||||
domain string @[index] // The actual domain name
|
||||
dnsrecords []DNSRecord
|
||||
administrators []u32
|
||||
status DNSZoneStatus // active, suspended, etc.
|
||||
metadata map[string]string
|
||||
soarecord []SOARecord //one soa record per zone, last one is valid, rest is for history
|
||||
}
|
||||
|
||||
|
||||
// Name represents a domain name configuration for a circle
|
||||
pub struct DNSRecord {
|
||||
pub mut:
|
||||
subdomain string // Optional subdomain e.g. main, means mail.example.com, example.com would be the domain, here only 'mail'
|
||||
record_type NameType // Type of DNS record
|
||||
value string // DNS record value/target
|
||||
priority u32 // Priority for MX records
|
||||
ttl u32 // Time to live in seconds
|
||||
is_active bool // Whether this record is currently active
|
||||
cat NameCat // Category of the DNS record, e.g., ipv4, ipv6, mycelium
|
||||
is_wildcard bool // Whether this is a wildcard record
|
||||
|
||||
}
|
||||
|
||||
// NameType defines the supported DNS record types
|
||||
pub enum NameType {
|
||||
a
|
||||
aaaa
|
||||
cname
|
||||
mx
|
||||
txt
|
||||
srv
|
||||
ptr
|
||||
ns
|
||||
}
|
||||
|
||||
pub enum NameCat {
|
||||
ipv4
|
||||
ipv6
|
||||
mycelium
|
||||
}
|
||||
|
||||
pub enum DNSZoneStatus {
|
||||
active
|
||||
suspended
|
||||
archived
|
||||
}
|
||||
|
||||
// SOA (Start of Authority) record for a DNS zone
|
||||
pub struct SOARecord {
|
||||
pub mut:
|
||||
zone_id u32 // Reference to DNSZone
|
||||
primary_ns string // Primary nameserver (e.g., ns1.example.com)
|
||||
admin_email string // Responsible party's email (e.g., admin.example.com)
|
||||
serial u64 // Serial number of the zone file, needs to be incremented on changes
|
||||
refresh u32 = 3600 // Time before zone should be refreshed (in seconds)
|
||||
retry u32 = 600 // Time before retry if refresh fails (in seconds)
|
||||
expire u32 = 604800 // Time before zone is considered no longer authoritative
|
||||
minimum_ttl u32 = 3600 // Default TTL for records without explicit TTL
|
||||
is_active bool = true // Whether this SOA record is active
|
||||
}
|
||||
|
51
specs/models_heroledger/main/group.v
Normal file
51
specs/models_heroledger/main/group.v
Normal file
@ -0,0 +1,51 @@
|
||||
module group
|
||||
|
||||
import freeflowuniverse.herolib.hero.models.core
|
||||
|
||||
// Group represents a collaborative or access-controlled unit within the system
|
||||
@[heap]
|
||||
pub struct Group {
|
||||
core.Base
|
||||
pub mut:
|
||||
name string // Human-readable name of the group @[index]
|
||||
description string // Detailed explanation of the group's purpose
|
||||
dnsrecords []u32 // DNSRecord IDs associated with this group (if any)
|
||||
administrators []u32 // User IDs with admin rights over the group
|
||||
config GroupConfig // Configuration settings for group behavior
|
||||
status GroupStatus // Current operational state
|
||||
visibility Visibility // Who can see this group
|
||||
created u64 // Unix timestamp when the group was created
|
||||
updated u64 // Unix timestamp when the group was last updated
|
||||
}
|
||||
|
||||
@[heap]
|
||||
pub struct UserGroupMembership {
|
||||
core.Base
|
||||
pub mut:
|
||||
user_id u32 @[index] // Reference to the user entity
|
||||
group_ids []u32 @[index] // Reference to the group entity
|
||||
}
|
||||
|
||||
// GroupConfig holds rules that govern group membership and behavior
|
||||
pub struct GroupConfig {
|
||||
pub mut:
|
||||
max_members u32 // Maximum number of users allowed
|
||||
allow_guests bool // Whether guest users (unregistered or read-only) can access
|
||||
auto_approve bool // Whether member join requests are auto-approved
|
||||
require_invite bool // Whether joining the group requires an explicit invitation
|
||||
}
|
||||
|
||||
// GroupStatus defines the lifecycle of a group
|
||||
pub enum GroupStatus {
|
||||
active
|
||||
inactive
|
||||
suspended
|
||||
archived
|
||||
}
|
||||
|
||||
// Visibility controls who can discover or view the group
|
||||
pub enum Visibility {
|
||||
public // Anyone can see and request to join
|
||||
private // Only invited users can see the group
|
||||
unlisted // Not visible in search; only accessible by direct link or DNS
|
||||
}
|
34
specs/models_heroledger/main/membership.v
Normal file
34
specs/models_heroledger/main/membership.v
Normal file
@ -0,0 +1,34 @@
|
||||
module circle
|
||||
|
||||
import freeflowuniverse.herolib.hero.models.core
|
||||
|
||||
> STILL WRONG
|
||||
|
||||
// Member represents a member within a circle
|
||||
pub struct Member {
|
||||
core.Base
|
||||
pub mut:
|
||||
user_id u32 // Reference to the user entity @[index]
|
||||
role MemberRole // Member's role within the circle
|
||||
status MemberStatus // Current membership status
|
||||
joined_at u64 // Unix timestamp when member joined
|
||||
invited_by u32 // User ID of who invited this member
|
||||
permissions []string // List of custom permissions
|
||||
}
|
||||
|
||||
// MemberRole defines the possible roles a member can have
|
||||
pub enum MemberRole {
|
||||
owner
|
||||
admin
|
||||
moderator
|
||||
member
|
||||
guest
|
||||
}
|
||||
|
||||
// MemberStatus represents the current status of membership
|
||||
pub enum MemberStatus {
|
||||
active
|
||||
pending
|
||||
suspended
|
||||
removed
|
||||
}
|
94
specs/models_heroledger/main/money.v
Normal file
94
specs/models_heroledger/main/money.v
Normal file
@ -0,0 +1,94 @@
|
||||
module circle
|
||||
|
||||
import freeflowuniverse.herolib.hero.models.core
|
||||
|
||||
// Wallet represents a wallet associated with a circle for financial operations
|
||||
pub struct Account {
|
||||
core.Base
|
||||
pub mut:
|
||||
owner_id u32 // Reference to the user who owns this account, owner not necessarily has admin rights
|
||||
address string // Blockchain address for this wallet @[index]
|
||||
balance f64 // Current balance in the wallet
|
||||
currency string // Currency type (e.g., "USD", "BTC", "ETH")
|
||||
assetid u32
|
||||
last_activity u64 // Unix timestamp of last transaction
|
||||
administrators []u32 // List of user IDs who are super admins, they have all rights, without any treashold
|
||||
accountpolicy u32 // Policy for signing transactions, 0 means none
|
||||
}
|
||||
|
||||
|
||||
pub struct Asset {
|
||||
core.Base
|
||||
pub mut:
|
||||
address string // Blockchain address for this asset @[index]
|
||||
assetid u32 // Unique identifier for the asset (e.g., "USD", "BTC", "ETH")
|
||||
asset_type string // "fiat", "crypto", "stablecoin", etc.
|
||||
issuer u32 // Issuer account
|
||||
supply f64 // Total circulating supply
|
||||
decimals u8 // Decimal precision (e.g., 2 for cents)
|
||||
is_frozen bool // Whether the asset is frozen globally
|
||||
metadata map[string]string // Additional metadata associated with the asset
|
||||
administrators []u32
|
||||
min_signatures u32 // Minimum number of signatures required for change of properties, linked to administrators
|
||||
|
||||
//BLOCKCHAIN
|
||||
}
|
||||
|
||||
|
||||
pub struct AccountPolicy {
|
||||
core.Base
|
||||
pub mut:
|
||||
transferpolicy AccountPolicyItem //can transfer money
|
||||
adminpolicy AccountPolicyItem //can change other policies
|
||||
clawbackpolicy AccountPolicyItem // Policy for clawback money
|
||||
freezepolicy AccountPolicyItem // Policy for freezing, unfreezing funds
|
||||
}
|
||||
|
||||
pub struct AccountPolicyItem {
|
||||
pub mut:
|
||||
signers []u32 // List of user IDs who are authorized to sign transactions
|
||||
min_signatures u32 // Minimum number of signatures required for a transaction
|
||||
enabled bool // Whether clawback is enabled for this account
|
||||
threshold f64 // Threshold amount for triggering clawback
|
||||
recipient u32 // Account ID of the recipient for clawback funds
|
||||
}
|
||||
|
||||
pub enum AccountStatus {
|
||||
active
|
||||
inactive
|
||||
suspended
|
||||
archived
|
||||
}
|
||||
|
||||
|
||||
|
||||
pub struct Transaction {
|
||||
core.Base
|
||||
pub mut:
|
||||
txid u32 // Unique identifier for the transaction
|
||||
source u32
|
||||
destination u32
|
||||
assetid u32
|
||||
amount f64
|
||||
timestamp u64
|
||||
status string // pending, confirmed, failed
|
||||
memo string
|
||||
tx_type TransactionType // transfer, clawback, freeze, issue, etc.
|
||||
signatures []Signature
|
||||
}
|
||||
|
||||
|
||||
pub enum AccountStatus {
|
||||
active
|
||||
inactive
|
||||
suspended
|
||||
archived
|
||||
}
|
||||
pub enum TransactionType {
|
||||
transfer
|
||||
clawback
|
||||
freeze
|
||||
unfreeze
|
||||
issue
|
||||
burn
|
||||
}
|
31
specs/models_heroledger/main/secretbox.v
Normal file
31
specs/models_heroledger/main/secretbox.v
Normal file
@ -0,0 +1,31 @@
|
||||
module main
|
||||
|
||||
pub struct SecretBox {
|
||||
pub mut:
|
||||
notary_id u32 // person who is allowed to decrypt this info
|
||||
value string //the actual incrypted value
|
||||
version u16 //version of the schema used to encrypt this value
|
||||
timestamp u64
|
||||
cat SecretBoxCategory //category of the secret box, e.g. profile
|
||||
}
|
||||
|
||||
pub enum SecretBoxCategory {
|
||||
profile
|
||||
}
|
||||
|
||||
pub struct Notary {
|
||||
core.Base
|
||||
pub mut:
|
||||
userid u32 // Reference to the user entity @[index]
|
||||
status NotaryStatus // Current user status
|
||||
myceliumaddress string // Mycelium address of the notary
|
||||
pubkey string // Public key for cryptographic operations @[index]
|
||||
}
|
||||
|
||||
pub enum NotaryStatus {
|
||||
active
|
||||
inactive
|
||||
suspended
|
||||
archived
|
||||
error
|
||||
}
|
32
specs/models_heroledger/main/signature.v
Normal file
32
specs/models_heroledger/main/signature.v
Normal file
@ -0,0 +1,32 @@
|
||||
module circle
|
||||
|
||||
import freeflowuniverse.herolib.hero.models.core
|
||||
|
||||
// Wallet represents a wallet associated with a circle for financial operations
|
||||
pub struct Signature {
|
||||
core.Base
|
||||
pub mut:
|
||||
signature_id u32 // Reference to the user who created the signature @[index]
|
||||
user_id u32 // Reference to the user who created the signature @[index]
|
||||
value string // The actual signature value
|
||||
objectid u32 // Reference to the user who created the signature @[index]
|
||||
objecttype ObjectType // Type of object being signed (e.g.,
|
||||
status SignatureStatus
|
||||
timestamp u64
|
||||
}
|
||||
|
||||
pub enum SignatureStatus {
|
||||
active
|
||||
inactive
|
||||
pending
|
||||
revoked
|
||||
}
|
||||
|
||||
pub enum ObjectType {
|
||||
account
|
||||
dnsrecord
|
||||
membership
|
||||
user
|
||||
transaction
|
||||
kyc
|
||||
}
|
58
specs/models_heroledger/main/user.v
Normal file
58
specs/models_heroledger/main/user.v
Normal file
@ -0,0 +1,58 @@
|
||||
module circle
|
||||
|
||||
import freeflowuniverse.herolib.hero.models.core
|
||||
|
||||
// Wallet represents a wallet associated with a circle for financial operations
|
||||
pub struct User {
|
||||
core.Base
|
||||
pub mut:
|
||||
username string // Unique username for the user @[index]
|
||||
pubkey string // Public key for cryptographic operations @[index]
|
||||
email []string @[index] // User's email addresses, needs to be considered unique and can be multiple
|
||||
status UserStatus // Current user status
|
||||
userprofile []SecretBox // User profile information stored in a secret box
|
||||
kyc []SecretBox // KYC information stored in a secret box
|
||||
}
|
||||
|
||||
|
||||
pub enum UserStatus {
|
||||
active
|
||||
inactive
|
||||
suspended
|
||||
archived
|
||||
}
|
||||
|
||||
pub struct UserProfile {
|
||||
pub mut:
|
||||
user_id u32 // Reference to the user entity @[index]
|
||||
full_name string // Full name of the user
|
||||
bio string // Short biography or description
|
||||
profile_pic string // URL to the user's profile picture
|
||||
links map[string]string // Social media or other relevant links
|
||||
metadata map[string]string // Additional metadata associated with the user profile
|
||||
}
|
||||
|
||||
pub struct KYCInfo {
|
||||
pub mut:
|
||||
user_id u32 // Reference to the user entity @[index]
|
||||
full_name string // Full name of the user
|
||||
date_of_birth u64 // Unix timestamp of user's date of birth
|
||||
address string // User's residential address
|
||||
phone_number string // User's phone number
|
||||
id_number string // Government-issued ID number (e.g., passport, driver's license)
|
||||
id_type string // Type of ID (e.g., "passport", "driver's license")
|
||||
id_expiry u64 // Unix timestamp of ID expiry date
|
||||
kyc_status KYCStatus // Current KYC status
|
||||
kyc_verified bool // Whether the KYC information has been verified
|
||||
kyc_verified_by u32 // User ID of the person who verified the KYC
|
||||
kyc_verified_at u64 // Unix timestamp when KYC was verified
|
||||
kyc_rejected_reason string // Reason for KYC rejection, if applicable
|
||||
kyc_signature u32 // Signature of the user for KYC verification
|
||||
metadata map[string]string // Additional metadata associated with the user profile
|
||||
}
|
||||
|
||||
pub enum KYCStatus {
|
||||
pending
|
||||
approved
|
||||
rejected
|
||||
}
|
22
specs/models_heroledger/main/user_kvs.v
Normal file
22
specs/models_heroledger/main/user_kvs.v
Normal file
@ -0,0 +1,22 @@
|
||||
module circle
|
||||
|
||||
import freeflowuniverse.herolib.hero.models.core
|
||||
|
||||
//a per user db
|
||||
pub struct UserKVS {
|
||||
core.Base
|
||||
pub mut:
|
||||
userid u32 // Reference to the user entity @[index]
|
||||
name string // Name of the key-value store
|
||||
}
|
||||
|
||||
pub struct UserKVSItem {
|
||||
core.Base
|
||||
pub mut:
|
||||
userkvs_id u32 // Reference to the user entity @[index]
|
||||
key string
|
||||
value string // Value associated with the key
|
||||
secretbox []SecretBox // Optional secret boxes for sensitive data
|
||||
timestamp u64 // Timestamp when the item was created or last updated
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user