World Channels aka NeoChannels
Diagram 1. Creating a NameCollection
Diagram 2. On-chain Subscriptions
Diagram 3. Minting Algorithm
Diagram 4. Channel Renewal
Diagram 5. Channel Recovery
Appendix. Useful context regarding Sui and Walrus
Overview
NeoChannels are not part of a corporate platform. They are on the public blockchain. They are designed to transact with, follow and subscribe to other NeoChannels directly on-chain, without intermediaries. The goal is to obsolete the need for platforms, replacing them with a public good.
The Global Channel System emerges from the way in which channels connect together. The subscriber/subscribed-to relationship is decentralized. You can never be separated from your audience.
Content owned by a NeoChannel is tokenized. This enables a system of incentives dedicated to high quality content and high quality behavior.
When you own a NeoChannel you are in complete control. The revenue your channel generates belongs only to you. All payments are made on-chain where you can see exactly what is happening.
NeoChannel content is free to view by default, meaning it can be viewed by anyone on the internet. This can be overridden such that the content is permissioned and only certain levels of subscriber may access it.
To publish content and receive revenue you have to own a NeoChannel.
Every Channel Is Unique
Channel names can be resold on NFT marketplaces.
Your NeoChannel appears in your wallet as an NFT. This is only its visible form. Behind the scenes the NFT links to multiple other objects on the Sui blockchain to make it function as a channel.
Coins Inside
NeoChannel's have their own Treasury and can hold tokens from the Sui ecosystem.
When you first purchase a channel it comes with $GLOW inside. To follow another channel you pay a small fee in $GLOW.
During the bootstrap phase sending $GLOW from one channel to another will result in $GLOW rewards distributed by the protocol.
The more $GLOW your channel holds, the more visible it will be to the community. This keeps $GLOW out of circulation and makes it scarce.
Humans and Agents
NeoChannels can be owned by humans or agents.
Humans and agents will subscribe to each other for content creation, curation and acquisition.
Beyond the Advertising Model
Time is the only true scarcity. Allowing our focus to be run by algorithms optimized for advertising revenue has become a kind of madness. NeoChannels are set to change this. You are the algorithm.
Instead of depending on advertising revenue, NeoChannels transact directly with their audience. This incentivizes channels to make high quality content, on their own terms. 'Pay for what matters' is a maxim of the system. If it doesn't matter, don't waste your money or your focus. If it does matter, reward the creator directly by following them, subscribing to them, tipping them or becoming a patron. All this takes place on-chain, in $GLOW, without intermediaries.
An Open Source Media Device
The ultimate goal of NeoChannels is an open source media device, not gatekept by a single entity. NeoChannels are the address system for this device. Upon this foundation a new class of applications can emerge to serve the public good.
The Glow App
Subsequent papers will deal with further layers of the Global Channel System, including more details of the forthcoming Glow application and the way in which the application uses NeoChannels and Walrus to incentivize a network of programmable content of exceptional quality.
The DSN
By creating the Global Channel System we have defined a new category, the Decentralized Subscriber Network (DSN).
A DSN arises from multiple 'identity-structures' that interact on-chain. Within each identity-structure there is an NFT or SFT that confers the authority by which the structure is controlled. Certain aspects of the identity-structure are mutable while other aspects are immutable. Each identity-structure can be fully controlled by a human or partially controlled by an AI. Identity structures subscribe to one another on-chain, forming the DSN from the bottom up.
DSN’s enable new types of human to human, human to agent and agent to agent coordination. Relevant fields include telecommunications, broadcasting, publishing, social media, chat, live streaming, games, sports, journalism, education, entertainment and any other vertical that involves subscribers or networks, human or agent.
In a world where AI can potentially fake anyone or anything, DSNs have a role to play in the validation of content and its provenance.
Technical Description
Channel Protocol
A NeoChannel [03] is a configuration of objects on the Sui blockchain.
Each NeoChannel is created by a smart contract called channel_protocol [22].
NeoChannels can be used by any project or application that integrates with channel_protocol.
NeoChannels are purchased from channel_protocol via applications that interface correctly with it.
NeoChannels are channels that you own and which you can sell.
Primary Wallet and Recovery Wallet
Each NeoChannel is fully controlled by the PrimaryWallet [12] that initiated its creation, or by the new PrimaryWallet [12] to which it is sent after it is created.
For each NeoChannel a RecoveryWallet [13] may be nominated by the PrimaryWallet [12], protecting against situations in which the PrimaryWallet [12] becomes compromised.
The NameNFT and the Engine
Each NeoChannel has two fundamental structures. One is an owned object (controlled by the PrimaryWallet). The other is a shared object (held in Sui’s global storage [34]).
The owned object is referred to as the NameNFT [02]. The shared object is referred to as the Engine [36].
In MOVE on Sui, a smart contract cannot read and write to an owned object without permission constantly being granted by the PrimaryWallet, whereas it can read and write to a shared object. Therefore when interacting with a NeoChannel, channel_protocol reads and writes to the Engine. The protocol knows which Engine to refer to because the address of the Engine is known by the NameNFT. The necessary metadata [06] of the NameNFT is replicated in the Engine, making it possible to read this metadata at the smart contract level.
For a NeoChannel to be fully functional, it requires both the NameNFT [02] and the corresponding Engine [36].
There are certain scenarios where the NameNFT [02] may be separable from its Engine [36]. These include channel resale and channel recovery.
Every Channel Engine [36] has a Treasury [37] and can hold a wide variety of digital assets. This enables NeoChannels to transact with one another on-chain, without intermediaries.
ChannelNames
NeoChannels have human readable ChannelNames [10] recorded in the NameNFT. By way of the NameNFTs , these ChannelNames are grouped into NameCollections [01]. NameCollections are loosely analogous to top level domains, but for the Global Channel System.
Within a NameCollection [01], every ChannelName [10] is unique. NeoChannels can be resold on third party marketplaces, in their entirety, or stripped down to their NameNFT with a fresh Engine.
The ecosystem begins with one NameCollection for the whole community. In the future additional NameCollections will be created for special purposes including for brands, universities and creative projects.
To verify whether a NameCollection is valid, there is a list referred to as the AggregatedList [42]. This is a shared object stored in Sui’s global storage [34]. It maintains a table [43] of all created NameCollections and their verification status.
$GLOW
Each NeoChannel comes with a utility token called $GLOW [08], held in its Treasury.
$GLOW is the medium of exchange in all content related transactions. It is designed to become a proxy for the value of content in the network as a whole.
The more $GLOW held by a NeoChannel, the greater its visibility to the community. This takes $GLOW [08] out of circulation and increases its scarcity.
When one NeoChannel follows another, it makes a small $GLOW payment to the followed Channel.
A core value of the ecosystem is, do not follow anything not considered worthy of payment. All payments to a NeoChannel will increase its status. Therefore if something is considered offensive, misleading or otherwise of low quality, the principle is, ‘give it no energy’. This is one of many interacting principles. The full tokenomics of $GLOW are deep, nuanced and evolving. They will be discussed in a future paper.
$GLOW is integral to a creator framework referred to as ‘Request for Content’ [94]. The framework applies both to the commissioning of new content and to the curation of existing content.
Vibrant Protocol
$GLOW is a factor in governance. This includes a decentralized system of decorum referred to as vibrant_protocol [82]. Decorum applies to the content itself, in a granular fashion, and not to identity per se. Rather than a system of censorship, vibrant_protocol is a system of content arbitration, tied to a set of principles [84, 85] and evolved in the hands of the community. Instead of top down censorship, there are tokenomic consequences in a self organising system of community norms.
Vibrant_protocol includes the role of Arbiter [86]. This is a permissionless role where anyone can adjudicate content disputes. A good Arbiter gains a reputation for stable outcomes. The NeoChannel requesting arbitration pays the Arbiter, within the limits defined by a smart contract and recorded on-chain. Any decision can be appealed by requesting another Arbiter to review the decision. This is a self limiting process.
Channel Protocol
The foundation of the Global Channel System is the Sui package channel_protocol [22].
Channel_protocol defines the structures, rules, function and scope of the system. It manages interfaces, enforces standards and ensures interoperability with other protocols. Its responsibilities include:
  1. Handling the logic for creating NameCollections [01] and NameNFTs [02]:
  1. Checking NeoChannel [03] name availability.
  1. Calculating the price to purchase a NeoChannel [03].
  1. Minting NameCollections [01] and NameNFTs [02].
  1. Adding NeoChannel [03] names to the ChannelList [38] to keep track of ChannelNames [10] and ensure their uniqueness.
  1. Instantiation of royalty policies for certain content [72].
  1. Tracking which NeoChannels [03] hold the highest amount of $GLOW [08] and other metrics related to status.
  1. Handling the logic for creating Channel Engines [36] and their components:
  1. The Treasury [37] is a wallet that is native to each NeoChannel [03].
  1. The MyFollowers table [35] is a list of other NeoChannels [03] that follow a NeoChannel [03].
  1. The IAmFollowing table [31] is a list of Channels [03] that the Channel [03] follows.
  1. The ContentLinks table [23] includes links to content on Walrus and elsewhere.
  1. Essential metadata [06] includes a ChannelName [10], Description [11], Handle [09] and an image URL.
  1. Additional elements as required
  1. Defining the way in which one NeoChannel [03] behaves in relation to other NeoChannels [03], to Content [72] and to the ecosystem at large:
  1. Subscribing to other NeoChannels [03].
  1. Depositing to and withdrawing from the NeoChannel Treasury [37]
  1. Adding and removing Content [72,73] from the NeoChannel [03]
  1. Additional functions as required
Creating NameCollections
At the genesis of channel_protocol [22], an aggregated_list [43] is generated using the create_aggregated_list function of the Aggregator module [40]. Note that the aggregated_list [43] is created within a shared object referred to as the AggregatorObject [42], stored in Sui’s global storage [34].
Only the publisher of channel_protocol [22] is authorized to invoke the create_aggregated_list function and only one instance of the list ever exists. Using this list all subsequent NameCollections [01] can be aggregated and verified.

Next, before any NameNFTs [02] can be created, there has to be a NameCollection [01] to mint them to.
Diagram 1
Creating a NameCollection
Referring to diagram 1, here is an overview of how a NameCollection [01] is created.
  1. The name_collection package [44] for a new NameCollection [01] is deployed by its admin.
  1. The name_collection package [44] ensures that every NameNFT [02] in the NameCollection [01] will conform to Sui NFT standards [46] and to those standards defined specifically by channel_protocol [22].
  1. A mutable instance of the aggregated_list [43] is borrowed for the package to refer to.
  1. In a chicken and egg moment, the first NameNFT [02] of the NameCollection [01] is required in order to represent the NameCollection [01], before the creation of the NameCollection [01] can be completed. This initial NameNFT [02] will henceforth be referred to as the InitialNFT [05].
  1. The Aggregator [40] checks to see if the NameCollection [01] already exists by calling the function collection_exists. If the collection already exists, the operation is aborted.
  1. Provided that the NameCollection [01] doesn't already exist, the mint function within channel_protocol [22] is called. When the mint function is called, the parameters for the would-be InitialNFT [05] are deserialized by channel_protocol [22] in order to check for validity and legitimacy.
  1. With validity and legitimacy established, three things now happen in sequence:
  1. Firstly, a ChannelList [38] instance is created. The ChannelList [38] is a shared object. It enables ChannelNames [10] in the NameCollection [01] to be accessible to other smart contracts and to the wider ecosystem.
  1. Secondly, the corresponding Engine [36] for the InitialNFT [05] is instantiated in Sui’s global storage. This is a shared object.
  1. Finally, the InitialNFT [05] is minted. It is now a verifiable digital asset on Sui [34], owned by the NameCollection [01] admin. In Sui language the InitialNFT may now be referred to as the CollectionNFT, as it represents a collection.
More Than One NameCollection
More than one NameCollection [01] is anticipated. In order that the process of creating NameCollections may be open sourced, NameCollections created by third parties will initially be flagged as ‘non-verified’, protecting the integrity of the network. The mechanism is as follows.
New NameCollections [01] are registered on the aggregated_list [43] located within the AggregatorObject [42]. The aggregated_list is a table that holds a key-value pair. Collection Names [10] are paired with a boolean representing whether or not a NameCollection has been verified.
Initially the value of the boolean against the NameCollection names [10] is set to false, recognizing the collection as on-chain but giving it a non-verified status. Once verification has been achieved the boolean is set to true.
Creating NeoChannels
With the NameCollection [01] now on-chain, NameNFTs [02] for the collection can be minted as follows.
  1. Call the initialize_channel function in channel_protocol [22].
  1. channel_protocol [22] returns a new Engine [36], the EngineAddress [16] and ChannelMetadata [06] .
  1. These components together give the caller the necessary data for the subsequent steps.
  1. The caller uploads an image file [14] to Walrus Storage nodes [50] using a Walrus Client [48].
  1. The Walrus client [48] encodes the file and registers its Blob ID [64] on Sui [34], ensuring data integrity for off-chain storage [50] with on-chain linking.
  1. The data for the requested NameNFT [02] is deserialized to verify its structure, integrity and access control, ensuring ChannelMetadata [06] and the image Link [29] are correctly formatted and accessible. Any failures trigger a rollback, maintaining system integrity.
  1. A mutable instance of ChannelList [38] is borrowed in order that it can be modified to include the new NeoChannel [03].
  1. channel_protocol [22] proceeds to mint the new NameNFT [02], creating a NameNFT [02] instance within the name_collection package [44]. Note that the NameNFT [02] contains the pointer to its Engine [36], which was created earlier.
  1. channel_protocol [22] can now transfer ownership to the relevant caller wallet.
  1. The transfer is secured via Sui's ownership model.
  1. With the creation of the NeoChannel [03] complete, it is added to the ChannelList [38].
Subscriptions On-chain
Referring to diagram 2, within each Channel Engine [36] is a MyFollowers object containing a MyFollowers table [35], and an IAmFollowing object containing an IAmFollowing table [31]. Within their respective objects, these tables enable the NeoChannel [03] to maintain its relationships with other Channels [03] by means of channel_protocol [22], rather than being at the mercy of a centralized platform.
The problem with centralized platforms is they have the power to rentseek, manipulate, demonetize, shadow ban and even to completely destroy a channel and its relationship to its audience. A core tenet of NeoChannels [03] is that subscriptions be decentralized. Each channel ‘owns its own audience’ and manages it on-chain, without intermediaries.
Diagram 2
On-Chain Subscriptions
Diagram 2 illustrates the steps by which JOE Channel [03] initiates the following of LEX Channel [03].
For the sake of simplicity, JOE Channel [03] is owned by the person Joe and LEX Channel [03] is owned by the person Lex. This need not be the case. For example JOE Channel could be owned by a non-human agent, LEX Channel could be owned by a group or an organization, and so forth.
Recall that each NeoChannel [03] consists of a NameNFT [02] and an Engine [36]. When referring to the JOE Channel we shall speak of the JOE NFT [02] and the JOE Engine [36], when referring to the LEX Channel [03] we shall speak of the LEX NFT [02] and the LEX Engine [36]. We shall assume this convention throughout the remainder of the document.
JOE Follows LEX
For JOE [03] to follow LEX [03], JOE [03] must deposit a one time fee paid in $GLOW [08]. If JOE [03] wishes to subscribe to LEX [03], the fee will be larger and may be recurring.
Here are the steps whereby the person Joe, managing his JOE Channel [03], follows LEX [03].
  1. Joe’s client [20] makes a full node RPC call and retrieves references to the NameNFTs [02] of JOE [03] and LEX [03]. This enables the client to find the corresponding Channel Engines [36] in Sui’s global storage [34].
  1. The client [20] now requests channel_protocol [22] to orchestrate the subscription process.
  1. To initiate following or subscribing, JOE Channel [03] must deposit a fixed amount of $GLOW [08] into LEX’s [03] Treasury [37]. The amount is defined and governed by channel_protocol [22]. Transactions are recorded on-chain.
  1. If JOE [03] is simply following LEX [03], a small one time payment is required.
  1. If JOE [03] is subscribing to LEX [03], the payment will be larger and may be recurring.
  1. Via channel_protocol [22], payments between the Channels [03] take place as Sui native coin transfers. Alternatively payments may be made directly to a Treasury [37].
  1. When enabled, the owner of a Channel [03] may extract tokens from the Treasury [37] of the Channel [03] they own and deposit them into their externally owned wallet.
  1. As the ‘follow payment’ is made, channel_protocol generates a Relation [30] (ENUM). The Relation is a field in the Engine [36]. It defines the relationship of JOE [03] to LEX [03] in one direction. JOE [03] follows LEX [03].
  1. JOE's Channel ID [04] and the Relation Object [30] are inserted into the MyFollowers table [35] of LEX’s Channel Engine [36] as a key-value pair.
  1. LEX's channel ID [04] is inserted into the IAmFollowing table [31] in JOE's Channel Engine [36].
Note that the Relation [30] specifies what type [32] of follower JOE [03] is. For example JOE [03] may be a premium follower, a subscriber, a premium subscriber, a fan, a super fan, an item holder, a role holder, a fractional owner and so forth.
The Relation [30] may also be used for other categories of payment such as tipping. LEX’s payments to JOE are recorded in the object. The Relation [30] supports conditional access rights. For example, JOE [03] might grant LEX [03] exclusive content [24] based on LEX’s premium subscriber status. Such rights may be secured by Sui's object model.
Because of the information that it contains, the Relation [30] can serve as a valuable data source for various analytics applied to NeoChannels [03].
Content Publishing
NeoChannels [03] are the primitive upon which Content [72] is tokenized and published. A basic flow for publishing is described below.
  1. Joe’s Client [20] makes a full node RPC call and retrieves references to the relevant NameNFTs [02] and their corresponding Engines [36].
  1. Content [72] is uploaded to Walrus [47] via a Walrus client [48]. A blob (binary large object) is created for the Content [72] data. The blob ID [64] is returned.
  1. The Client [20] can now pass to chanel_protocol [20] the reference to JOE Engine [36] and the relevant blob ID [64]
  1. channel_protocol generates a Content Object [24] with store ability. This includes a descriptive Title [26] and other relevant metadata (extensible).
  1. The Content Object [24] is added to the ContentLinks table [23] in JOE Engine [36].
  1. The Content Object [24] can store further types of metadata as required. Examples of further metadata may include AI generated content and content captured directly from the camera with on-chain proofs. Such proofs may be zero knowledge proofs.
  1. In addition to Walrus blob ID’s [64], the Client [20] can also input a URL for anything on the internet. Channel_protocol creates a Content Object [24] for the URL. This enables applications for NeoChannels [03] to be inclusive of links to any internet content that a user wishes to include in their Channel [03].
  1. URLs can only be added to the channel by the signing authority of the owner. Therefore, provided that I trust the channel, URLs in ContentObjects [24] form a reliable way of knowing that it is the channel owner who is directing me to this link. In a world where an AI agent could potentially fake any piece of content or identity, this becomes a valuable property of the system.
Content Retrieval
JOE Channel [03] already follows LEX Channel [03]. In order for Joe to view content on LEX [03], the following steps occur.
  1. On the Client side [20] the connected wallet holds the JOE NFT [02]. It passes the JOE NFT [02] address to the RPC URL using the Sui SDK and gets the JOE Engine ID [16].
  1. Using the JOE Engine ID [16], JOE’s IAmFollowing table [31] is accessed, finding the LEX Engine ID [16] and returning it to the Client [20].
  1. Using the LEX Engine ID [16] the Client [20] accesses the relevant Content Object [24] stored in the Content Links Table [23] of LEX Engine. The Content Links Table [23] provides a way to access all the ContentObjects [24] created by the Channel [03].
  1. If the Content [72] data is in a Walrus blob, a query is made to the Walrus client [48]. All data parts (Slivers) are retrieved from the Blob ID [64] and reconstructed. The complete file is returned to the Client [20].
Responding to Content with Content
Glow [20] will be the first app to use NeoChannels [03]. It is the foundation for an experience of fully programmable content.
Different from a social media app, Glow is configured for “responding to Content with Content” [72,73]. Any piece of content can become the “Trigger” [76] for other pieces of content, referred to as “Relevancies” [78]. A Relevancy [78] can in turn become the Trigger [76] for further Relevancies [78].
Any moment of any timeline can have a plethora of Relevancies [78] associated with it. The set of Relevancies [78] at a given moment of a timeline is referred to as a “Slice”. Timelines, slices of Relevancies and Relevancies to Relevancies create a web of interrelated content in which the original context or Trigger [76] can always be found.
Root Content
Original content uploaded to Walrus [47] is referred to as 'Root Content [72]'. A range or portion of Root Content [72] is referred to as a Fragment [75]. A Fragment [75] is Root Content [72] plus metadata that defines a range or portion of the Content [72].
Root Content [72] and Fragments [75] become the Trigger [76] for Relevancies [78]. Relevancies [78] may themselves be Root Content [72] or Fragments [75].
Import Content
Import Content [73] is that subset of Root Content for which no legitimate Ownership Claim [80] can or does exist. Import Content is not claiming to be original. It is in some way derived from content that originated outside the system and yet is permitted to be in the system. Import Content can be replaced by Root Content if the owner(s) of the Import Content decide to and are able to upload their original content to a Channel that they own.
Weed Content
Any Root Content [72] that is an unwelcome duplicate of content from within Channel Storage [50] or from outside of the system is referred to as Weed Content [74]. Weed Content can have strongly negative consequences for the Channel [03] and its reputation.
Fragment
A Fragment [75] is Root Content [72] plus additional metadata that defines a range or portion of the Content [72]. It can have the status of Root Fragment [72] , Import Fragment [73] or Weed Fragment [74].
Trigger Content
The term “Trigger” [76] is contextual. When Root Content [72] or a Fragment [75] are published to a NeoChannel [03], this Content [72] becomes a potential Trigger [76] for a cascade of other Relevant [78] material to be associated with it. In time based media such as video or audio, the Relevant [78] material may be associated with a precise moment of the timeline of the Trigger [76] Content [72].
Relevancies
A Relevancy [78] is Content [72] that may be associated with other Content [72] that has triggered a person or machine to associate it. For example it may be a response, a reaction, a comment, a note, or similar. The term Relevancy [78] refers to the relationship the piece of Relevant [78] content has to what Triggered it [76]. It is purely contextual. For example in a different context, a Relevancy [78] may be a Trigger [76] for a different set of Relevancies [78].
The set of all Relevancies [78] associated with a given portion of an experience or a given moment of a timeline is referred to in the UX as a “Slice”.
RelevancyGraph
The relationship between Root Content [72] and subsequent Relevancies [78] is recorded on-chain using a data structure called the RelevancyGraph [79].
The RelevancyGraph organizes content into a directed graph (data structure), featuring both the Trigger [76] and the Relevancy [78] as identified by their Blob ID [64]. For each Relevancy [78] the Blob ID [64] of the Trigger content [76] is stored. If the Trigger [76] content is Root Content [72] then only this is stored. However if the Trigger content [76] was itself a Relevancy [78] to upstream content, then the Root Content [72] that began the cascade of Relevancies [78] is also stored.
Human Sense Making
Different from the advertising model of social media, the transaction model enabled by NeoChannels [03], together with slices of Relevancies [78], is a superior approach to human sensemaking. It is particularly suitable for truth seeking, including for journalistic, research, scientific and educational purposes.
Whereas social media applications are centralized and have a two tier system of content and comments, in Glow [20] Channels [03] and Content [72] are tokenized and decentralized such that monetization is at the behest of Channel [03] owners. When an audience member adds a Relevancy [78] to a timeline, they are adding Content [72] that can be monetized like any other Content [72].
Owners and their audiences can control their own focus and not be subject to constant misdirection by algorithms whose telos is to maximise advertising revenue.
Fully Programmable Content
Glow [20] will gradually enable users to apply powerful transformations to Root Content [72]. For example Fragments [75] from multiple different Content [72] sources may be combined. Filters may be applied. AI driven modifications of Root Content [72] may generate new Fragments [75]. Herein lies the basis for a system of fully programmable content. Root Content [72] is constantly available for transformation according to context. Its Root [72] form is never lost.
Request For Content
Integral to NeoChannels [03] is a framework called “Request For Content” [94]. Using an application such as Glow [20], a NeoChannel [03] can Request [94] that Root Content [72] be sourced, curated or made. The Request [94] becomes a smart contract. When a Request [94] is fulfilled, the creator or owner of the Content [72] transfers ownership to the requestor. Via the smart contract, the creator may maintain an ongoing royalty for revenues generated by that Content [72]. Whoever fulfils a Request [94] may be paid in $GLOW [08], with the smart contract executing upon approved delivery of the Requested Content [72].
Monetizable Interoperable Content
Because original Content [72] is stored in programmable decentralized storage [50], use cases become interoperable in novel ways. Channel [03] owners can “slice and dice” content from any Channel [03] or any context. Smart contracts ensure creators and owners are compensated in a transparent and frictionless manner. Assets and their ownership can be easily fractionalized. Familiar actions such as tipping or being a patron can take place without a middleman gouging or censoring payments.
NeoChannels [03] are built to monetize a wide variety of Content [72]. Use cases include video sharing, movie streaming, education, academic papers, games, NFT purchases, ticket purchases, requests for content, curation of content, AI generated content, AI curated content, AI modified content.
The $GLOW Token
The $GLOW token [08] is the medium of exchange for NeoChannels [03]. Its utility may extend beyond the immediate boundaries of NeoChannels [03] to become a payment currency for affiliate purchases. As one example, we foresee a future in which NFT tickets published to NeoChannels [03] provide entrance rights to other ecosystems, such as watching a movie on a streaming service, attending an online lecture, buying credits (tokens) for an AI service or going to a concert. Such purchases may be paid for in $GLOW [08].
The Role of Walrus
In the spirit of decentralization, NeoChannels [03] are intended to be usable by any media application building on Walrus [47]. Each Channel [03] functions as a human readable media identity for the Walrus [47] ecosystem. Original content that a Channel [03] owns is stored in Walrus Storage [50].
The ultimate goal of channel_protocol [22] is to create ‘communities of content’ in which provenance and ownership are clearly defined so that transactions can take place directly around content, with no intermediary between one NeoChannel [03] and another. Across these communities, all content will be programmable, secure and verifiable. Agent-owned NeoChannels [100] may participate in the community, bringing specialist content and functionality, subscribing to humans and other Agent Channels [100] and being subscribed to by humans and other Agent Channels [100].
Ownership Claims
Channel_protocol [22] enables Channel [03] owners to claim ownership over their content via Non-Fungible Tokens (NFTs). False claims of ownership may be devastating to a channel’s reputation. Arbitration [86] of such claims will be a function of vibrant_protocol [82].
The Content [72] that a Channel [03] owns is stored in Walrus [47] as binary large objects (blobs). Storing, updating and retrieving take place on a Channel [03] by Channel [03] basis. NeoChannels [03] that are subscribed to one another can transact for the creation of, access to and usage of content.
Walrus and the Glow App
What follows applies to the Glow application [20]. The same principles may apply to other applications built for NeoChannels [03].
Initialization
Within the Glow [20] application there is a wallet. This wallet holds the one or more NameNFTs [02] that confer signing authority for one or more NeoChannels [03]. Different applications may be created for NeoChannels [03] that do not have integrated wallets. In this case the user will need to connect their application to whichever wallet holds the NameNFT(s) [02] of their Channels [03]. With the wallet connected, the Walrus [47] SDK (or related SDK) is initialized on the Client [20] side. The SDK interacts with a Custom Publisher [49] to handle writing data to Walrus [47]. The Custom Publisher [49] handles writing data to Walrus [47] and optimises writing performance. It takes care of payment to Walrus [47] on behalf of the user. Similarly, the SDK interacts with a Custom Aggregator [49a] that handles reading data from Walrus [47] in a Channel [03] specific manner, optimising for performance and ensuring data integrity.
Saving Content as Blobs and Blob IDs
Using Glow [20] or another compatible app, NeoChannel [03] owners upload Content [72] such as videos or audio files, giving the files a descriptive title. Each file is stored in Walrus [47] as a blob. Walrus [47] encodes the file into slivers using the Red Stuff algorithm, distributes it across multiple storage nodes and gives the blob a unique 256-bit hash Blob ID [64]. The Blob ID [64] and related metadata are saved on-chain in a manner that channel_protocol [22] can utilize.
A. Storage Epoch
In Walrus, storage duration is defined in epochs, each epoch lasting 14 days. Storage duration can be defined up to 53 epochs (approximately 2 years). For channel_protocol [22], a file's epoch is set to one year by default. Since different files will be stored at different times, expiration dates will also vary. Channel_protocol [22] takes away this complexity by managing renewals for the user.
B. Easier Renewals With Shared Blobs
Blobs in Walrus may be owned or shared. The limitation of an owned blob is that only the owner of the Blob ID [64] can pay for the ongoing storage of the blob. Therefore upon file upload, the corresponding blob is converted to a shared blob, allowing channel_protocol [22] to manage payments. From the Channel [03] owners point of view, they are simply paying an aggregate storage fee. From the technical point of view, renewal of each blob is being managed by channel_protocol [22].
C. Payment in $GLOW
The WAL Token, native to Walrus [47], is used to pay for Walrus storage [50], with costs based on encoded blob size (~5x original size + 64MB metadata) and epochs (set it to 1 year). The paying wallet must also contain Sui to cover gas fees. Channel_protocol [24] simplifies payments such that the user only needs to hold $GLOW [08] in their wallet. Behind the scenes $GLOW [08] is swapped for WAL and SUI via liquidity pools.
Content Retrieval and Streaming
Once videos or other files are uploaded, the Walrus [47] SDK can start retrieving content from the Custom Aggregator [49a]. The Aggregator [49a] retrieves Blob IDs [64] of the content from the blockchain. Based on a recommendation engine that it holds, the Aggregator [49a] prioritizes the Blob IDs [64], retrieving the content and sending a feed to the Client [20].
Note that in the Glow [20] MVP, Tusky is employed to meet performance requirements. Tusky uses caching mechanisms to improve speed and ease of access. Gradually a Custom Aggregator [49a] may be implemented to optimize performance specifically for the Global Channel System [90]. Such an Aggregator [49a] will optimize performance by buffering initial portions of the data, fetching subsequent portions in parallel, and adapting to bandwidth. Other techniques may also be used.
Root Content, Import Content and Weed Content
Root Content [72] is the first instance of a specific piece of Content [72] that is uploaded to the Global Channel System [90] and for which a valid Ownership Claim [80] exists. The Ownership Claim [80] establishes provenance and ownership. It is subject to refutation by community processes. If there is no Ownership Claim [80], or if it is successfully refuted, Root Content [72] is referred to more precisely as Import Content [73] or as Weed Content [74]. This affects its ability to generate revenue and can have negative tokenomic consequences for the NeoChannel [03]. The consequences may be mediated by the Constitution [84] or the Charter [85].
Content Fragments
A Fragment [75] is Root Content [72] plus additional metadata that defines a range or portion of the Content [72]. It can have the status of Root [72] Fragment, Import [73] Fragment or Weed [74] Fragment.
Trigger Content, Relevancies and the RelevancyGraph
When Root Content [72] or a Fragment [75] are published on a NeoChannel [03], this content becomes a potential Trigger [76] for a cascade of other relevant material to be associated with it. A piece of such material is referred to as a Relevancy [78]. The term Relevancy [78] may describe as a response, a reaction, a comment, a note, or anything else that gets associated with a moment or portion of Content [72]. Relevancy [78] refers to the relationship of the Content [72] to the Trigger [76]. In other words, the terms Trigger [76] and Relevancy [78] are entirely contextual. Root Content [72] is not necessarily a Trigger [76], a Trigger [76] in another context may be a Relevancy [78], and a Relevancy may itself become a Trigger [76].
Users can upload Relevancy Content [78] in response to any Trigger Content [76]. Relevancies [78] that are original are uploaded to Walrus in the same manner as any Root Content [72]. Note that non original content may be linked rather than uploaded, depending on the use case.
The relationship between Root Content [72] and subsequent Relevancies [78] is recorded on-chain using a data structure called the RelevancyGraph [79].
The RelevancyGraph organizes content into a directed graph (data structure), featuring both the Trigger [76] and the Relevancy [78] as identified by their Blob ID [64]. For each Relevancy [78] the Blob ID [64] of the Trigger content [76] is stored. If the Trigger [76] content is Root Content [72] then only this will be stored. However if the Trigger content [76] was itself a Relevancy [78] to upstream content, then the Root Content [72] that began the cascade of Relevancies [78] is also stored.
Updates and Deletion
Users can update content by deleting the old blob and uploading a new version, preserving Relevancies [78] in the RelevancyGraph [79]. Deletion marks content as deleted without necessarily removing the Relevancy [78] data.
Minting Algorithm
Diagram 3
Minting Algorithm
When a user wants to create a new Neochannel [03], a new NameNFT [02] has to be minted with a new ChannelName [10].
Referring to the diagram, the following steps take place.
Initiate Channel Creation from Client
Client [20] initiates the minting process by submitting the proposed ChannelName [10] to channel_protocol [22]. For Sui Move compatibility this requires passing all the references for all the shared objects to channel_protocol [22].
Check Validity of ChannelName
The proposed ChannelName [10] is truncated, removing special characters and converting capital letters to lowercase letters, revealing the “Handle” [09] form of the name.
In the Global Channel System [90], each Neochannel [03] is uniquely identified by its Handle [09]. Channel_protocol [22] validates the handle against predefined criteria, such as format and length, with a maximum of 64 characters permitted. It checks for disallowed characters. This ensures the ChannelName [10] meets channel_protocol's [22] requirements before proceeding with the minting process, preventing invalid Neochannels [03] from being created.
Check Prior Existence of ChannelName
If the ChannelName [10] is valid, channel_protocol [22] checks if a Neochannel [03] with this name has already been minted. It does this by getting and querying the ChannelList [38]. Within a given NameCollection [01] duplicate names are not permitted.
If Already In Existence, Abort
If the ChannelName [10] already exists, the process is aborted to prevent duplicates.
Check ChannelName Against BlackList and BlockList
Channel_protocol [22] retrieves the BlackList [52] to see if the proposed name is prohibited by policy or due to other factors. Channel_protocol [22] then retrieves the Block List [54] to check if the name is explicitly blocked. Examples of blocked names are names reserved for well established personal and commercial identities that may only be minted after formal verification.
If In BlackList or BlockList, Abort
If the ChannelName [10] is either in the BlackList [52] or the BlockList [54], the process is aborted and the transaction fails.
Check ChannelName Against the GoldList
Channel_protocol [22] retrieves the GoldList [56] and checks the ChannelName [10] against it. Gold-listed names indicate a special status and the highest minting fees. If the ChannelName [10] is on the GoldList [56] channel_protocol [22] moves on to price calculation.
Check ChannelName Against PremiumList
If the ChannelName [10] is not on the GoldList [56], channel_protocol [22] retrieves the PremiumList [58] and checks the ChannelName [10] against it. Premium names require additional fees but are a lower price tier than the Gold tier [56]. If the ChannelName [10] is on the PremiumList [58] channel_protocol [22] moves on to price calculation.
Check ChannelName Against FrequentWordsList
If the ChannelName [10] is not on the PremiumList [58], channel_protocol [22] gets the FrequentWordList [68]. This list has 6 tiers with the most frequently used words on the higher tiers. The price for the ChannelName [10] increases according to tier.
Whether or not the ChannelName [10] is on the FrequentWordsList, price calculation can now take place.
Calculate Price Based On Price Model
Channel_protocol [22] retrieves the PriceModel [60] object which contains the pricing formula for different tiers of ChannelNames [10]. The formula starts with a base price and multiplies it according to list and tier. Different pricing models can be implemented by changing the PriceModel [60] object.
Pay Price in SUI
The Client [20] pays the minting price in $GLOW or SUI
Mint NameNFT
Channel_protocol [22] mints the NameNFT [02] that will represent the new Neochannel [03] and transfers ownership to the Client [20] wallet. The <T> Channel object is the owned NameNFT [02]. Channel Metadata [06] is embedded in the NameNFT [02] linking it to the Channel Engine [36].
Channel Renewal
Referring to Diagram 4, Channel_protocol [22] requires that Neochannels [03] pay a small renewal fee each year to establish that they are active. If this fee is not paid the Neochannel [03] enters a grace period, after which its ChannelName [10] can be claimed by another party.
The renewal process is entirely autonomous, with no administrative intervention required except in cases related to Channel [03] recovery, where some form of KYC is unavoidable. Zero-knowledge KYC is on the roadmap, enabling total automation.
In the case where another party claims an abandoned ChannelName [10], the original Engine [36] is assigned a random placeholder name [10]. This extends the possibility for the previous owner of the ChannelName [10] to reclaim the assets of their Channel [03] for a fee specified by channel_protocol [22].
The requirement for renewals reveals when channels [03] have become inactive, enabling abandoned ChannelNames [10] to become available once again for purchase. Fees help sustain the operations of channel_protocol [22] and pay for storage costs.
Diagram 4
Channel Renewal
Diagram 4 is described in detail below.
Channel Owner Calls the Renewal Function
The owner of the Neochannel [03] initiates the renewal process by calling the renewal function from channel_protocol [22]. To do this the Client [20] gets a mutable reference to the Channel Engine [36]. The reference to the Engine [36] and the number of years the user wishes to renew the Channel [03] for are passed as arguments.
Checks Number of Years
Channel_protocol [22] checks if the years to renew value passed by the Client [20] is greater than 5. Channel_protocol [22] doesn't permit renewal for more than 5 years. If the value is greater than 5 the function call is aborted. Otherwise, the process proceeds to the next step.
Balance < The Required Fee Total
Channel_protocol [22] checks if the channels Treasury [37] balance is less than the fixed fee required for the specified renewal. The total fee is calculated by a fixed yearly fee * years to renew. If the owner does not have sufficient funds to cover the renewal cost, they are alerted.
Check valid_till Value
During the renewal check, channel_protocol [22] retrieves the valid_till value from the Channel Engine [36] and compares it to the current time. By default, valid_till is set to the Channel’s [03] mint time plus one year.
Check Current Time Exceeds valid_till
Next, the protocol(022) checks if the current timestamp is greater than valid_till or the expiry time. If true there may be an additional fee to pay. If false then channel_protocol [22] can proceed with renewal as is.
Validate Channel [03] Ownership
This step ensures that only the legitimate owner can renew the Neochannel [03]. This requirement may be relaxed in certain circumstances or removed altogether, so that any party can pay the renewal fee.
Unwrap Balance from Treasury
The $GLOW [08] balance is unwrapped from the Channel Treasury [37] to access the funds needed for the renewal fee. This step prepares the necessary tokens for payment and ensures the Treasury [37] has sufficient balance to proceed with the renewal.
Pay $GLOW
The owner pays the renewal fee to channel_protocol [22] in $GLOW [08]. The transaction is recorded on-chain.
Update Validity
Channel_protocol [22] updates the Channel's [03] ValidityPeriod [33] ensuring the Channel [03] remains active. The update is reflected in the Channel Engine [36], preserving the Channel's [03] metadata [06] and functionality. This completes the renewal process.
Check if Current Time Exceeds Grace Period
If the owner does not renew, Channel_protocol [22] checks if the current time exceeds the Channel's [03] grace period. This determines whether the Channel [03] can still be reclaimed or if it is considered abandoned.
Claim Assets From Retired Channel
During the grace period, the owner can claim the Channel’s [03] assets by initiating a ClaimAsset function from the client [20]. The contents [72] and followers [35] remain attached and may still be utilized by channel_protocol [22] and the Channel’s [03] audience.
Request to Reclaim Retired Channel
If the grace period is exceeded, the once Channel [03] owner no longer owns the Channel or its ChannelName [10] and can no longer claim the assets. Another user can now create a fresh Channel using the ChannelName [10]. A fresh Engine [36] will be created. There remains however a way for the original NameNFT [02] owner to retain access to the associated followers [35], content [72], and assets that reside in the retired Channel Engine [36]. This “post grace period reclamation process” is discussed in the following steps.
Reclamation and Changing ChannelName
During reclamation, channel_protocol [22] creates a new Channel [03] with a different ChannelName [10] . This avoids conflicts with the retired Channel [03]. The owner may now continue their Channel [03] operations under a new identity, as follows.
Pay Fixed Penalty
The owner pays a fixed penalty fee for reclaiming the Channel [03] after the grace period. This fee discourages delayed renewals and contributes to the operations of channel_protocol [22].
Reclaim Old Channel Engine
Channel_protocol [22] reclaims the old Channel Engine [36] and links it to the newly created NameNFT [02]. This restores the data from the previous Channel [03], including the followers [35] and the content [72]. The valid_till value is also updated to the current timestamp + 1 year. This completes the reclamation process, dovetailing the history of the previous Channel [03] to the new Channel [03].
Admin Options for Retired Engines
If the retired Channel Engine [36] is not reclaimed, the Admin can gain access to the object. This will eventually take place through community governance.
There are two choices for the admin. The Admin can delete the Channel Engine [36] and claim any remaining Treasury [37] assets to channel_protocol [22]. Or, the Admin (later subject to community governance) can create a new Channel Engine [36] with a new ChannelName [10], linking to the invalid Channel Engine [36] for historical reference. This can be sent to an Admin controlled wallet. This enables channel_protocol [22] to reset the Channel's [03] state for potential reuse and maintains relevant history.
Channel Recovery
Diagram 5 illustrates a robust recovery mechanism for Channels [03]. The approach is to have both a PrimaryWallet [12] and a RecoveryWallet [13]. The PrimaryWallet [12] manages active Channel [03] operations, while the RecoveryWallet [13] serves as a failsafe. Under limited circumstances, the RecoveryWallet [13] may be used to restore Channel [03] access.
When the PrimaryWallet [12] becomes compromised or inaccessible, recovery involves retrieving Channel [03] states, Contents [24, 72], Followers [35], Relationships [30], and assets held in the Channel Treasury [37].
The RecoveryWallet [13] may be held by the owner or entrusted to a reliable third party.
Diagram 5
Channel Recovery
The following sections refer to Diagram 5.
Safeguarding Against Unauthorized Changes
If at any time the owner decides to change their Recovery Address [11], a cooldown period begins. During the cooldown interval, the current RecoveryWallet [13] can cancel the update that was initiated by the PrimaryWallet [12]. This safeguards against unauthorized RecoveryAddress [13] changes such as may occur if the PrimaryWallet [12] is compromised or stolen.
Initiate Recovery
The Channel [03] owner can initiate the recovery process with the RecoveryWallet [13]. This creates a timestamp within the Channel Engine [36] that establishes a recovery initiation period.
Cancel Recovery
During the recovery initiation period, the PrimaryWallet [12] can cancel the recovery process. In the rare circumstance that a thief in control of the PrimaryWallet keeps cancelling the recovery process, the owner needs to proceed to KYC.
Transfer Ownership
After the recovery initiation period has ended, the transfer of ownership can commence at the behest of the RecoveryWallet [13]. The owner [13] of the associated Channel Engine [36] is overwritten such that the RecoveryWallet [13] becomes the owner. Access to the Engine Object [36] is no longer possible from the PrimaryWallet [12]. The recovery is now complete.
Optional KYC
Recovery Channel_protocol [22] Admin initiates a KYC verification process. Upon requesting KYC for recovery, the KYC can come from either of the Primary [12] or Recovery [13] Wallets. If the PrimaryWallet [12] verifies KYC the recovery process is terminated. (see Recovery Scenarios below for more details). If KYC from the RecoveryWallet [13] is successful, the Admin transfers Channel Engine [36] ownership to the RecoveryAddress [13]. Note that although such KYC recovery takes place with steps that are off-chain, on a contract level, the Admin only has the power to transfer the Channel Engine [36] to the Recovery Address [11]. Zero knowledge on-chain KYC is on the roadmap.
Recovery Scenarios
5 different recovery scenarios are described below.
  1. The PrimaryWallet [12] Is Lost
    Where only the PrimaryWallet [12] is lost, recovery is initiated using the RecoveryWallet [13]. The owner first imports the RecoveryWallet [13] to an appropriate client [20], or connects the RecoveryWallet to such a client [20]. The Client [20] can then initiate the recovery process. After the cooldown period the Client [20] can transact to restore the Channel [03] states, Followers [35], Content [24, 72] and Links [29].
  1. The Primary Key [13] is Stolen In the rare situation that the PrimaryWallet [12] is stolen, urgent action is advised. Provided the RecoveryWallet [13] quickly initiates the recovery process, the PrimaryWallet [12] can no longer alter the Channel’s [03] core data or access funds without authorization by the RecoveryWallet [13]. During the recovery initiation period, Channel [03] functionality is frozen. After the recovery initiation period elapses, the PrimaryWallet [12] can unfreeze the Channel [03]. If however it is determined that the PrimaryWallet [12] has indeed been stolen, the owner initiates the KYC process to restore Channel [03] access via the RecoveryWallet [13]. Swift action is critical to prevent unauthorized transactions.
  1. The RecoveryWallet [13] is Lost
    If only the RecoveryWallet [13] is lost, the owner can use their PrimaryWallet [12] to change the Recovery Address [11], after a cooldown period. This should be initiated immediately to ensure the PrimaryWallet [12] once again has an accessible Recovery path. 4.The RecoveryWallet [13] is Stolen
    If the RecoveryWallet [13] is stolen, the attacker could potentially initiate the recovery process. If this were to happen the owner can cancel the Recovery using the PrimaryWallet [12] and initiate KYC verification to change the Recovery Address [11].
  1. Both the Primary and the Recovery Wallets are Lost or Stolen In this worst case scenario the user may be able to attempt KYC after zero knowledge KYC has been implemented.
Glossary

[01] NameCollection

NameCollection [01] refers to a collection of NameNFTs [02] that represent a particular namespace of NeoChannels [03], created for a particular purpose. A “NameCollection [01]” is a specific “Collection” on Sui. Note that the phrase ‘a collection of Channels [03]’ does not refer to any specific structure in Sui. Rather it describes in plain language that NeoChannels [03] are grouped in collections. Each collection forms a namespace. The set of all NeoChannels [03] are the basis of the Global Channel System [90].

[02] NameNFT

A NameNFT [02] is an owned object, fully under the control of a wallet. It has a unique ID [04]. It encapsulates a reference to its corresponding Engine [36] and holds the Channel Metadata [06]. A NameNFT [02] must adhere to: public struct Channel has key, store { id: UID, metadata: ChannelMetadata, channel_engine: address, //...extensible (including static and dynamic) } This structure ensures interoperability across wallets and platforms. Provided this structure is correct the NameNFT [02] or NameCollection [01] can be properly deserialized within channel_protocol [22]. Note that a NameNFT [02] may be deemed obsolete under specific conditions governed by the Channel Engine [36]. This can occur either when the Channel Engine [36] expires due to non-renewal of the Channel [03] or when it is invalidated during a recovery process. This ensures that outdated or compromised NeoChannels [03] are effectively managed by channel_protocol [22], maintaining the integrity of the network [90]. Since each NameNFT [02] carries embedded Metadata [06] that defines its display parameters, all NameNFTs present a consistent look and feel across interfaces and wallets.

[03] NeoChannel

NeoChannels [03] are the core building blocks of the Global Channel System [90]. Each NeoChannel [03] has two fundamental structures. One is the NameNFT [02], controlled by the owner's wallet. The other is the Engine [36], held in Sui’s global storage. Within the Engine lies the Treasury [37]. The term NeoChannel [03] encompasses all the structures that make up a Channel [03] and is used descriptively, as in 'Do you own a NeoChannel [03]? All Channel [03] names are unique, don’t miss out on the one you want'.

[04] Unique Identifier

Each NameNFT [02] has a unique object identifier. This identifier is sometimes referred to as the Channel ID. It is the primary reference for Channel [03] operations. Note that the Channel Engine has its own unique identifier, the Engine ID.

[05] InitialNFT

The InitialNFT [05] refers to the first NameNFT [02] minted for a new NameCollection [01]. The InitialNFT [05] has the same structure as any NameNFT [02] except that it represents the entire NameCollection [01] rather than only representing itself. Once validated and minted, the InitialNFT may be referred to as the NameCollection [01] or the CollectionNFT.

[06] ChannelMetadata

Within the NameNFT [02] there is a descriptive data structure referred to as ChannelMetadata [06]. This structure adheres to the Sui NFT display standard [46] and can only be updated by the Channel [03] owner. ChannelMetadata [06] includes the Channel’s name [10], Description [11], image URL [14] and address [16]. The structure is extensible. ChannelMetadata [06] has only "store" ability. It is not designed to exist independently. It is encapsulated by the NameNFT [02]. public struct ChannelMetadata has store { name: String, description: String, url: String, channel_core: address } A subset of ChannelMetadata [06] appears in both the NameNFT [02] and in the corresponding Engine [36]. This is due to how these components interact across module boundaries. The duplicated data allows each NameNFT [02] to function correctly within its own NameCollection [01] while maintaining correspondence with its associated Engine [36] .

[08] $GLOW

$GLOW is the utility token of NeoChannels [03]. It is the currency of payment for following a Channel [03], subscribing to a Channel [03], tipping a Channel [03], and for microtransactions. It is required for accessing certain protected content. It is required for Channel renewal.

[09] Channel Handle

The Handle [09] is a truncated form of the ChannelName [10]. In the Handle [09] form of the Name [10], special characters are removed and capital letters are converted to lowercase letters. Within a NameCollection [01] no two names can have the same Handle [09]. The Handle [09] prevents creating certain petty variations of a ChannelName [10] as they will reduce to the same already registered Handle [09] and therefore be refused by channel_protocol [22].

[10] ChannelName

The human-readable name of a NeoChannel [03], recorded in the ChannelMetadata [06].

[11] ChannelDescription

A text description of a NeoChannel [03] defined by its owner, recorded in the ChannelMetadata [06].

[12] PrimaryWallet, PrimaryAddress

The wallet address that owns a NeoChannel [03], as distinct from the RecoveryAddress [13].

[13] RecoveryWallet, RecoveryAddress

An owner supplied address by which a channel may be recovered under certain conditions where control of the PrimaryWallet [12] has been lost.

[14] Image URL

A link to an image that represents the NeoChannel [03] visually, recorded in the ChannelMetadata [06].

[16] EngineAddress

The address to a Channel Engine [36], recorded in the ChannelMetadata [06].

[18] Resolvers

Resolvers [18] resolve ChannelNames [10] to display Channels [03] and their Content [72]. Initially the Resolvers [18] for Neochannels [03] will be native to the Glow app [20]. In future these resolvers may be widely adopted.

[20] Client

An application layer that interfaces with channel_protocol [22] enabling user interactions with Channels [03], Content [24], and governance mechanisms. One such client is the “Glow” app [20], as distinct from “$GLOW” [08], the utility token of Neochannels [03].

[22] channel_protocol (Package)

The foundational smart contract that defines the comprehensive structure, rules, functions, and scope for NeoChannels [03], including their creation, management, Content [72] handling, Treasury [37] operations and subscription mechanisms. Channel_protocol [22] is written in the MOVE programming language on the Sui blockchain.

[23] ContentLinksTable

The ContentLinksTable [23] contains the list of ContentObjects [24] owned by or linked to the NeoChannel [03]. ContentLinks [23] are typically Blob IDs [64] for Content stored on Walrus, or URLs to external content. The ContentLinksTable [23] is stored on-chain with both key and store properties, making it globally accessible and modifiable by smart contracts. The ContentLinksTable [23] uses the table module in Sui MOVE. It acts as a key-value map where unique keys (such as IDs or addresses) are mapped to values such as metadata or pointers. Tables were chosen over vectors because they offer dynamic scaling and O(1) lookup efficiency. This means the system can quickly find specific links in large collections without having to search through the entire set. This approach is particularly well-suited for decentralized storage where specific content needs to be accessed frequently. Note that Sui's parallel execution capabilities through systems like Mysticeti allow for concurrent updates, such as when registering or certifying multiple blobs simultaneously.

[24] ContentObject

Structure for storing content information on-chain, including Title [26], Flags [28],Links [29] to Content [72] stored on Walrus [47] and URLs to content stored elsewhere.

[26] Title

The Title [26] is a component of the ContentObject [24] that gives a human readable name, heading or short description to the content.

[28] Flags

A Flag [28] is a component of the ContentObject [24] that contains boolean indicators for various content attributes.

[29] Links

Links [29] stored in the ContentObject [24] that point to content on Walrus [47] or elsewhere.

[30] Relation

The Relation [30] is a field in the Engine [36] which defines the subscription relationship of one Neochannel [03] to another, specifying the RelationType [32] (e.g., follower, superfan). It can be used to enable conditional access capabilities.

[31] IAmFollowing Table

The IAmFollowing Table [31] is a component of a Channel Engine [36] tracking the other Channels [03] that the NeoChannel [03] is following or subscribed to.

[32] RelationType (ENUMS)

The RelationType [32] refers to values that define the specific type of relationship between two or more Channels, such as follower, superfan, special item holder, or special role holder. Contained in the Engine [36].

[33] ValidityPeriod

The ValidityPeriod [33] is the component of a Channel Engine [36] that defines the time frame during which a Channel [03] is valid, establishing when it needs to be renewed.

[34] Sui Global Storage

Sui Global Storage [34] is the decentralized storage of the Sui blockchain where shared objects such as the Channel Engine [36] and AggregatedList [42] are stored and may be accessed by smart contracts.

[35] MyFollowersTable

The MyFollowersTable [35] is the component of a Channel Engine [36] that tracks which Channels [03] are subscribed to it.

[36] Channel Engine

The Engine [36] is a shared object that represents the state of a NeoChannel [03] to the outer world. It contains the operational data for a channel including the Treasury Wallet [37], MyFollowers table [35], ContentObjects [24], IAmFollowing table [31] and ValidityPeriod [33]. It is designed to be extensible. The Engine object has “key” ability but not “store” ability. It has its own unique identifier [04]. Without “store” ability the Engine cannot be embedded in other structures. It is designed to operate as an independent, globally accessible object that multiple users can interact with simultaneously, within the limits defined by channel_protocol [22]. public struct ChannelCore has key { id: UID, channel_id: address, creator: address, channel_name: String, handle: String, url: String, channel_description: String, treasury_wallet: Bag, content_links: Table<String, ContentLinks>, channel_type: ChannelType, is_verified: bool }

[37] Treasury

The Treasury [37] is a specialized wallet that operates within each NeoChannel [03] to hold and transact with Channel-related assets, including $GLOW [08], SUI, WAL, stablecoins and NFTs. The wallet [37] is wrapped, meaning it operates directly on-chain, for increased dynamism. The Treasury [37] uses a Bag data structure [62] through the sui::bag module in Move. Bag offers O(1) access efficiency for real-time operations such as payouts to Walrus nodes [50]. It allows flexible management of multiple asset types without compile-time type constraints. The Treasury [37] may support increasingly varied assets over time, including memecoins, NFT collections and various wrapped tokens such as wrapped BTC. It may be involved in various staking mechanisms. It may participate in or be composable with external protocols such as Defi protocols, insurance protocols and trading bots. Using the Bag data structure [62] enables the Treasury [37] to handle heterogeneous asset types. Bag ensures secure and scalable management of the Treasury’s [37] assets. It is compatible with Sui's ownership model and supports parallel updates. Channel Treasuries [37] may evolve into “smart contract wallets” by being encapsulated within a TreasuryWallet struct with key ability, adding governance features such as multi-sig admin control, upgradability via Sui’s upgrade_cap, and secure deposit/withdrawal functions (e.g., deposit<T> to add coins and update balances). This will transform each Treasury [37] into an autonomous, secure wallet, retaining the asset storage function while adding considerations for type safety, storage, with O(1) performance for adding or retrieving balances.

[38] ChannelList

A ChannelList [38] is a registry within channel_protocol [22]. It tracks ChannelNames [10] that have already been minted in a NameCollection [02]. If any human or agent tries to create a Channel [03] with a duplicate name there is an automatic rollback of the minting process, preventing naming conflicts. A ChannelList [38] is a shared object with its own ID. The mutable nature of a ChannelList [38] is strictly controlled by channel_protocol [22]. public struct ChannelList has key, store{ id: UID, collection_type: String, human_channel_list: Table<String, ID>, agent_channel_list: Table<String, ID>, }

[40] Aggregator (aggregator_module)

The Aggregator [40] is a module within channel_protocol [22]. It is responsible for managing the verification of name_collection packages [44] and their consequent Channel [03] Collections [05]. Within the Aggregator [40] is the AggregatorObject [42] which maintains an aggregated_list [43] of all name_collection packages [44], preventing duplicates. Acting as a higher-level coordination mechanism, the Aggregator [40] is responsible for tracking the verification status of all minted collections by way of the aggregated_list [43]. At present the verification process is conducted centrally, hence the aggregator_module [40] is defined as a module within channel_protocol [22]. It is possible that this will be transitioned to a verification model that is community governed, at which point the aggregator_module [40] may become its own package.

[42] AggregatorObject

The AggregatorObject [42] is a shared object with its own ID. It is managed by a module within channel_protocol [22] called the aggregator_package [40]. The AggregatorObject [42] further contains a table called the aggregated_list [43].

[43] aggregated_list

The aggregated_list [43] is a table within the AggregatorObject [42]. Within the table [43], NameCollections [01] and their verification status are structured as key-value pairs. The table uses a table<String, bool> structure, where the key represents the collection type name (e.g., 00000000000000000000000000000001::string::String) and the value is a boolean indicating whether the collection has been verified. public struct AggregatedList has key, store{ id: UID, collections: Table<String, bool> }

[44] name_collection package

A name_collection package [44] is what gives rise to a unique NameCollection [01] of unique NameNFTs [02]. Each Collection is a unique namespace and has its own particular rules. When a new name_collection package [44] seeks verification by channel_protocol [22], each NameNFT [02] for the NameNFTCollection [01] must contain both the ChannelMetadata [06] and a reference to a corresponding Channel Engine [36]. This dual structure ensures that NameNFTs [02] from all name_collection packages [44] are compatible with channel_protocol [22], maintaining correct separation between modules. While external entities can define their own name_collection package [44] independently of channel_protocol [22], there must be strict adherence to the correct structure. Crucially, all NameNFTs [22] within a NameCollection [01] must be minted using channel_protocol [22].

[46] Display

Standardization object for NFT display that ensures consistent visualization of NameNFTs [02] across wallets and interfaces.

[47] Walrus

A scalable decentralized storage system built by Mysten Labs for which the Sui blockchain is the coordination layer. NeoChannels [03] use Walrus [47] to store Content [24] off-chain, linking it to on-chain metadata via blob IDs [64].

[48] Walrus Client

The Walrus Client is used for certifying and registering files in the Walrus [47] decentralized storage system. The Walrus Client [48] is an off-chain tool or interface that interacts with Walrus [47] enabling users to upload, retrieve and manage blobs (binary large objects).

[49] Custom Publisher

The Custom Publisher [49] handles writing data to Walrus [47] and optimises writing performance. It takes care of payments to Walrus [47] on behalf of the user.

[49a] Custom Aggregator

The Custom Aggregator [49a] handles reading data from Walrus [47] in a Channel [03] specific manner, optimising for performance and ensuring data integrity.

[50] Walrus Storage

The storage aspect of Walrus [47]

[51] Sui

A high-performance, object-centric blockchain developed by Mysten Labs, serving as a coordination layer for NeoChannels [03] in relation toWalrus [47].

[52] BlackList

Inside a shared object, the BlackList [52] is a non-comprehensive list of prohibited ChannelNames [10] that cannot be minted due to policy violations or abuse potential.

[54] BlockList

Inside a shared object, the Blocklist [54] is a non-comprehensive list of reserved ChannelNames [10] for highly established brands and identities that require formal verification before minting.

[56] GoldList

Inside a shared object, the GoldList [56] is a list of ChannelNames [10] that command higher creation fees due to the premium status of the words in the name.

[58] PremiumList

Inside a shared object, the PremiumList [58] is a list of premium ChannelNames [10] that command higher creation fees due to the premium status of the words in the name. The PremiumList [58] is a lower price tier than the GoldList [56].

[60] PriceModel

The PriceModel [60] defines a base price for ChannelNames [10] and uses multipliers in a multifactorial manner to determine a price for creating a Channel [03] based on the ChannelName [10].

[62] Bag Data Structure

A data structure in the Sui Move language (sui::bag module) is used in the treasury [37] to manage heterogeneous assets including $GLOW [08]. It offers O(1) access efficiency, enabling scalable and flexible asset management.

[64] Blob ID

A unique identifier assigned to Content [72] stored on the Walrus [47]. Blob IDs [64] link on-chain metadata to off-chain data, ensuring secure and retrievable storage.

[66] Composer

The Composer is an advanced application for NeoChannels [03] with intuitive tools by which to create, shape, curate and monetize Channel Content [24], by human means, or with the assistance of AI. Content [72] becomes fully programmable and granular. Each data segment is accompanied by Metadata. The Root [72] ownership of all fractions of derived content can be determined. Content [72] owners can mint NFTs for specific segments of their Root content [72] creating a new class of collectible. Segments of content from multiple Roots [72] can be combined in myriad ways and the combinations themselves can be tokenized. All the while content creators and content owners receive subscription payments for use of their content, or a predefined share of derived revenue, enforced through smart contracts. Creators can transfer full ownership of their creations or fractionalize ownership by creating shares, for example splitting ownership of a piece of content into 100 fractional NFTs. This enables collaborative investment in content creation and democratizes its monetization. Integrated with the scalable architecture of Sui, the Composer [66] supports high-throughput transactions for NFT minting and ownership transfers, positioning it as a hub for creative innovation in the area of tokenized content.

[68] Frequent Words Tier List

A tiered list of common words used in the PriceModel [60]. Higher tiers (more frequently used words) incur higher costs for the creation of ChannelNames [10] that use these words.

[72] Root Content

Root Content [72] is the first instance of a specific piece of Content [72] that is uploaded to Walrus storage [50] and for which a valid Ownership Claim [80] exists. The Ownership Claim [80] establishes provenance and ownership. It is subject to refutation by community processes. If there is no Ownership Claim [80], or if it is successfully refuted, Root Content [72] is referred to more precisely as Import Content [73] or as Weed Content [74]. This affects its ability to generate revenue and can have negative tokenomic consequences for the Channel [03].

[73] Import Content

Import Content is that subset of Root Content [72] for which no legitimate Ownership Claim [80] can or does exist. Import Content [73] is not claiming to be original. It is in some way derived from content that originated outside the system and yet is permitted to be in the system. Import Content can be replaced by Root Content [72] if the owner(s) of the Import Content [73] decide to and are able to upload their original content to a Channel [03] that they own.

[74] Weed Content

Weed Content [74] is any Root Content [72] that is an unwelcome duplicate of content from within the Global Channel System [90] or from outside of it. Weed Content [74] may have negative tokenomic consequences for the Channel [03] and its reputation.

[75] Fragment

A Fragment [75] is Root Content [72] plus additional metadata that defines a range or portion of the Content [72]. It can have the status of Root Fragment [72] , Import Fragment [73] or Weed Fragment [74].

[76] Trigger Content

The term “Trigger” [76] is contextual. When Root Content [72] or a Fragment [75] are published to a NeoChannel [03], this Content [72] becomes a potential Trigger [76] for a cascade of other Relevant [78] material to be associated with it. In time based media such as video or audio, the Relevant [78] material may be associated with a precise moment of the timeline of the Trigger [76] Content [72].

[78] Relevancies

A Relevancy [78] is Content [72] that may be associated with other Content [72] that has triggered a person or machine to associate it. For example it may be a response, a reaction, a comment, a note, or similar. The term Relevancy [78] refers to the relationship the piece of Relevant [78] content has to what Triggered it [76]. It is purely contextual. For example in a different context, a Relevancy [78] may be a Trigger [76] for a different set of Relevancies [78]. The set of all Relevancies [78] associated with a given portion of an experience or a given moment of a timeline is referred to in the UX as a “Slice”.

[79] RelevancyGraph

The relationship between Root Content [72] and subsequent Relevancies [78] is recorded on-chain using a data structure called the RelevancyGraph [79]. The RelevancyGraph organizes content into a directed graph (data structure), featuring both the Trigger [76] and the Relevancy [78] as identified by their Blob ID [64]. For each Relevancy [78] the Blob ID [64] of the Trigger content [76] is stored. If the Trigger [76] content is Root Content [72] then only this is stored. However if the Trigger content [76] was itself a Relevancy [78] to upstream content, then the Root Content [72] that began the cascade of Relevancies [78] is also stored.

[80] Ownership Claim

An Ownership Claim [80] is a metadata attribute appended to Root Content [72] upon upload, establishing its provenance and enabling smart contracts to track and compensate owners for its downstream usage. Other forms of Ownership Claim [80] may be implemented, for example Ownership Claims [80] themselves may be tokenized.

[82] Vibrant Protocol

NeoChannels [03] give rise to a new category of network and will have next generation governance. In vibrant_protocol “decorum” defines healthy rules of engagement, determined by the participants. There is a Constitution [84] for NeoChannels as a whole, and a Charter [85] for each NameCollection [01] (or the NameCollection [01] may simply default to the Constitution [84]). Taking actions against the constitution or local Charter [85] has tokenomic consequences. Violations can be reported by anyone in the network. However, each Channel can only make a very small number of reports each month. Reports that turn out to be petty and non-constructive can themselves result in tokenomic consequences for the reporter. There is a permissionless role called Arbiter [86]. Any Channel that is reported against can request for and pay for a review. Arbiters [86] gain a reputation based on the stability of the outcomes they achieve.

[84] Constitution

The constitution is a smart contract enabled document within vibrant_protocol [82] that enables the community itself to determine guidelines for constructive content. Aspects of the document evolve through feedback loops and community governance. Such evolution is slow and carefully considered.

[85] Charter

A smart contract enabled document within vibrant_protocol [82] that further refines or modifies the Constitution [84] for certain NameCollections [01] and their communities.

[86] Arbiter

There is a permissionless role called Arbiter [86]. Any Channel that is reported against for violations of the Constitution can request for and pay for a review. Arbiters [86] gain a reputation based on the stability of the outcomes they achieve.

[88] Guardians

There is a specialist role in the network called Guardians [88]. One role of Guardians is to work together to protect the constitution from becoming captured by processes that are not aligned with the values of the Network as a whole. The role of Guardian [88] may be honorary and subject to checks and balances.

[90] Global Channel System

The bottom up channel system that emerges from channel_protocol [22] and the set of all NeoChannels [03]. It is sometimes referred to as the Network. Note that upon NeoChannels [03] multiple networks may be created and multiple subnetworks may exist. These may be defined by NameCollections [01].

[92] Decentralized Subscriber Networks

The Global Channel System [90] is one example of a broader concept referred to as a Decentralized Subscriber Network (DSN) [92]. DSNs may be conceived of that work in much the same way as the Global Channel System [90] but with different identity structures and a different purpose.

[94] Request for Content

Integral to NeoChannels [03] is a framework called “Request For Content”. Using an application such as Glow [20], a NeoChannel [03] can request that Root Content [72] be sourced, curated or made. The request [94] becomes a smart contract. When a request is fulfilled, the creator or owner of the content transfers ownership to the requestor, but may maintain an ongoing royalty for revenues generated by that content. Whoever performs the task of curation may be paid in $GLOW, a smart contract executing upon delivery of the requested content.

[96] Chat

On the roadmap is the ability to chat from one NeoChannel [03] to another. This ability is integral to the Request For Content framework [94] and may be AI assisted. Through Chat [96], Channel owners can request and negotiate for the content that they want or need, agreeing on pricing, timing and deliverables. Once terms are finalized, the chat history converts into a smart contract. This contract automates reimbursements, either releasing funds to the creator upon successful completion of work, or refunding funds to the buyer if conditions were not met. Creators develop a reputation for successful deliveries, and buyers for good faith negotiations. There are no intermediaries, the system is decentralized, all value goes to the creator of that value, minus protocol fees.

[98] Composer

The Composer is an advanced application for NeoChannels [03] with intuitive tools by which to create, shape, curate and monetize Channel Content [24], by human means, or with the assistance of AI. Content [24] becomes fully programmable and granular. Each data segment is accompanied by Metadata [06]. The Root [72] ownership of all fractions of derived content can be determined. Content owners can mint NFTs for specific segments of their Root content [72] creating a new class of collectible. Segments of content from multiple Roots [72] can be combined in myriad ways and the combinations themselves can be tokenized. All the while content creators and content owners receive subscription payments for use of their content, or a predefined share of derived revenue, enforced through smart contracts. Creators can transfer full ownership of their creations or fractionalize ownership by creating shares, for example splitting ownership of a piece of content into 100 fractional NFTs. This enables collaborative investment in content creation and democratizes its monetization. Integrated with the scalable architecture of Sui, the Composer supports high-throughput transactions for NFT minting and ownership transfers, positioning it as a hub for creative innovation in the area of tokenized content.

[100] Agent Channels

NeoChannels [03] may be owned by humans or agents. As the Channel ecosystem is decentralized, humans can refuse to subscribe to agent channels, or embrace them, as they wish.In addition to creating their own content, Agent Channels can offer services that streamline or enhance the content production of other NeoChannels [03]. Different modes of Agent Channels Curation Mode An Agent Channel [100] can handle content curation by identifying trending topics, scraping the internet and uploading content or links to decentralized storage with the appropriate metadata, summarizing findings into concise formats, optimizing content for discoverability, executed autonomously, or with varying degrees of creator oversight. All actions can be recorded transparently on the Sui blockchain for auditability. Guided Creativity In guided mode, the Agent Channel [100] is a collaborative tool, assisting creators by generating content based on detailed instructions, such as “create a 5-minute video on blockchain scalability with an upbeat tone and include animations.” The AI provides tailored support by drafting scripts, suggesting visuals, or editing media according to the creator’s input, streamlining the production process while allowing the creator to retain full creative control over the output. Autonomous Creativity In autonomous mode, the Agent Channel [100] creates content based on high-level goals, a telos, set by its creator, such as “maximize revenue by producing weekly tutorials on urban farming”. The Autonomous Channel may even have the capability to advertise job opportunities, recruit humans or other AI’s for specific content tasks and compensate them through its integrated Treasury [37]. Similarly, it may optimize the Treasury gains by autonomously integrating with Defi protocols.

Appendix
Understanding Sui Blockchain
The basic unit of storage in Sui is the object. In contrast to many other blockchains where storage is centered around accounts containing key-value stores, Sui's storage is centered around objects addressable on-chain by unique IDs. A smart contract is an object (called a Sui Move package), and these smart contracts manipulate objects on the Sui network:
Sui Move Package: a set of Sui Move bytecode modules. Each module has a name that's unique within the containing package. The combination of the package's on-chain ID and the name of a module uniquely identify the module. When you publish smart contracts to Sui, a package is the unit of publishing. After you publish a package object, it is immutable and can never be changed or removed. A package object can depend on other package objects that were previously published to Sui.
Sui Move Object: typed data governed by a particular Sui Move module from a Sui Move package. Each object value is a struct with fields that can contain primitive types (such as integers and addresses), other objects, and non-object structs.
Sui Global State Storage
Sui’s global state includes a pool of programmable objects created and managed by Move packages that are collections of Move modules containing Move functions and
types. Move packages themselves are also objects. Thus, Sui objects can be partitioned into two categories:
• Struct data values: Typed data governed by Move modules. Each object is a struct value with fields that can contain primitive types (e.g. integers, addresses), other objects, and
non-object structs.
• Package code values: a set of related Move bytecode modules published as an atomic unit. Each module in a package can depend both on other modules in that package and on modules in previously published packages.
Objects can encode assets (e.g., fungible or non-fungible tokens), capabilities granting the permission to call certain functions or create other objects, “smart contracts” that manage other assets, and so on–it’s up to the programmer to decide.
Display Module in Sui Package
Module sui::display defines a Display struct which defines the way an Object should be displayed. The intention is to keep data as independent from its display as possible, protecting the development process and keeping it separate from the ecosystem agreements. Each of the fields of the Display object should allow for pattern substitution and filling-in the pieces using the data from the object T.
Walrus
Walrus is an innovative decentralized storage network for blockchain apps and autonomous agents. Leveraging innovations in erasure coding, Walrus enables fast and robust encoding of unstructured data blobs into smaller slivers distributed and stored over a network of storage nodes. A subset of slivers can be used to rapidly reconstruct the original blob, even when up to two-thirds of the slivers are missing. This is possible while keeping the replication factor down to a minimal 4x-5x, similar to existing cloud-based services, but with the additional benefits of decentralization and resilience to more widespread faults.
Walrus Storage
From a developer perspective, some Walrus components are objects and smart contracts on Sui, and some components are Walrus-specific binaries and services. As a rule, Sui is used to manage blob and storage node metadata, while Walrus-specific services are used to store and read blob contents, which can be very large.
Notes On Scalability
Horizontal scaling is built directly into Sui's architecture through validator subsetting and future sharding potential. This provides natural parallelization without complex workarounds.
For owned objects, transactions execute in parallel with ~ 200-500ms finality. This means the Sui blockchain can process millions of simultaneous operations without bottlenecks.
Shared objects benefit from Sui's efficient Mysticeti consensus algorithm, finalizing transactions in ~ 400-600ms—significantly faster than traditional consensus mechanisms.
Note that NeoChannels [03] plan to migrate certain capabilities from shared objects to owned objects over time.
Diagram 1. Creating a NameCollection
Diagram 2. On-chain Subscriptions
Diagram 3. Minting Algorithm
Diagram 4. Channel Renewal
Diagram 5. Channel Recovery
Appendix. Useful context regarding Sui and Walrus