Protocol Specification
Overview
Holograph is a smart contract protocol that enables fungible and non-fungible tokens to move across Ethereum Virtual Machine (EVM) compatible blockchains, while maintaining a persistent contract address, token ID, and underlying data. In one particular embodiment, an exact bit-to-bit version of a digital assets is passed onto an EVM blockchain and combined with a specific set of rules and restrictions, enabling the asset to move freely among blockchains while maintaining its token attributes.
This is achieved by a process called Holographing, which was inspired from the process of holography, which is a technique in physics that “enables a wavefront to be recorded and later re-constructed.”
Holograph facilitates the use of a single, unique contract address and token ID across all blockchains, making them the definitive identifying characteristics of the token, while guaranteeing secure asset transfers between blockchains. By using a strictly enforced process, initial seeds are populated across blockchains, allowing for all subsequent contracts to be derived from them. With this approach, contract addresses are ensured to remain consistent no matter where they exist. The seeds allow for Holograph to synchronize and support all existing EVM blockchains, in addition to all future EVM blockchains.
Furthermore, Holograph expands this concept by utilizing Holographers
, which operate in an isolated layer and enforce the universal standards of all types of digital assets. This creates a virtual machine-like environment inside of a blockchain, empowering developers to create and innovate freely without compromising data integrity or universal token standards.
Mechanics
A deployment object is created that includes certain preliminary configurations. This object is hashed and signed by the deploying wallet, and the configuration parameters are passed along to a Factory
contract on the initially deployed blockchain. The Factory
contract uses the configuration and original signer as the salt in the CREATE2 function. The signed configuration ensures that a deployment cannot be modified or changed, without altering the deployment contract address. This allows for the deployment of an identical contract on any other EVM blockchain by any wallet or contract.
More specifically, using the CREATE2 function allows for the deployment of a contract to the same address on all EVM compatible blockchains, as long as the initial configuration remains unaltered. These deployed contracts are used for the purpose of creating one (or more) asset(s) on Chain A, and making it possible to move said asset(s) to Chain B (or any other EVM compatible blockchain) by either locking or burning the asset(s) on Chain A, and then minting the same asset(s) on Chain B (with same contract address and token ID), or unlocking the asset(s) on Chain B (if already created).
In the following example, this specification will unpack the deployment of contracts for creating and tracking an NFT. Initially, the original deployment blockchain is identified. For example, a numeric value can be assigned to each of the chains, e.g., Ethereum : 1, BSC : 2, Avalanche : 3, Polygon : 4, etc. (in some instances these may be hashed). Next, the Holograph
and Enforcer
contract addresses are determined (in some instances these may be hashed). Then, the Custom
contract bytecode is identified. Once all the information is available, a Holographer
contract can be deployed with the previously identified values provided in the initial configurations.
Deployment of the bridgeable contract starts by hashing all the necessary configuration parameters and converting them into a salt variable. The salt is checked against the Registry contract to ensure that it has not already been deployed on the current blockchain. The Custom
contract bytecode is deployed with a user defined salt. The CREATE2 function is then called with the salt, Factory
contract address, and Holographer
bytecode to deploy a Holographable contract. Before finalizing the deployment process, all configuration parameters are passed on to the newly deployed Holographer
contract, including Custom
contract address, which configures the Enforcer
, Holographer
, and Custom
contract itself.
Thus, a contract deployed via this process is guaranteed to have the exact same underlying source code and configurations, ensuring that an exact Holographable version of the contract can be made on all EVM compatible blockchains.
Main Components
Holograph Protocol consists of 10 main components. These components are the building blocks with which the entire tech stack operates.
Core
HolographGenesis
Genesis
will be deployed on all blockchains that run and support Holograph. All main components will be deployed via Genesis
. Future blockchains will have a Genesis
deployment as well.
HolographFactory
Factory
enables developers to submit a signed version of the following elements to deploy a Holographed
contract on the blockchain:
- primary deployment chain
- token type (ERC-20, ERC-721, etc.)
- event subscriptions
- custom contract bytecode
- custom initialization code
Any additional blockchains that developers want to support can have the same signed data submitted to Factory
, allowing for the creation of an identical Holographed
contract.
The primary job of Factory
is to:
- allow propagation of exact data across all blockchains
- ensure a proper standard is selected and used
- ensure all deployments succeed and work as expected
- ensure that security is enforced and impenetrable
HolographRegistry
Registry
is a central on-chain location where all Holograph data is stored. Registry
keeps a record of all currently supported standards. New standards can be introduced and enabled as well. Any properly deployed Holographed
contracts are also stored as reference. This allows for a definitive way to identify whether a smart contract is secure and properly Holographed
. Verifying entities will be able to identify a Holographed
contract to ensure the highest level of security and standards.
HolographBridge
Bridge
is a universal contract that functions as the primary entry and exit point for any Holographed
tokens to and from all supported blockchains. Bridge
validates and ensures integrity and standard enforcement for every bridge-in and bridge-out request. Additionally, Bridge
implements a universal standard for sending tokens across blockchains by abstracting away complexities into sub-modules that remove the burden of management for developers. This allows for simple one-click/one-transaction native gas token payment-based interactions for all bridge requests.
HolographOperator
Operator
's primary job is to know the messaging protocols that are utilized by the Holograph for all cross-chain messages, and to ensure the authenticity and validity of all requests being submitted. Operator
ensures that only valid bridge requests are sent/received and allowed to be executed inside of Holograph.
Holograph
Holograph
is the primary entry point for all users and developers. A single, universal address across all blockchains will enable developers an easy way to interact with the protocol’s features. Holograph
keeps references for all current Registry
, Factory
, and Bridge
implementations. Furthermore, it allows for single interface management of the underlying protocol.
Holograph
provides a reference to the name and ID of all supported blockchains. Additionally, it:
- enables custom contract logic that is chain-dependent
- frees developers from having to query and monitor the blockchain
Standards Enforcers
Holographer
Holographer
exists at the core of all Holographed
contracts, which is applied whenever a Holographed
contract is deployed. Holographer
pieces together all components and routes all inbound function calls to their proper contracts, ensuring security and the enforcement of specified standards. Holographer
is isolated on its own private layer and is essentially hard-coded into the blockchain.
Enforcer
Enforcer
enables and ensures complete standards, compliance, and operability for a given standard type (HolographERC20
and HolographERC721
are perfect examples). Enforcers
store and manage all data within themselves to ensure security, compliance, integrity, and enforcement of all protocols. Communication is established with custom contracts via specific event hooks. The storage/data layer is isolated privately and not directly accessible by Custom
contracts.
Royalties
Royaties
is an on-chain royalties contract for non-fungible token types. It supports a universal module that understands and speaks all of the different royalty standards on the blockchain. Royaties
is built to be extendable and can have new royalty standards implemented as they are created and agreed upon.
Interfaces
Interface
is used to store and share standardized data. It acts as an external library contract. This allows all Holograph
contracts to reference a single instance of data and code.
External Components
Custom Contract
Custom
is any type of contract that was developed outside of Holograph, and is used to create a Holographed
contract. This empowers developers to build their projects however they want. The requirements for enabling a Custom
contract to be Holographable are minimal, and allow for even novice-level developers to implement. Any current and future fungible and non-fungible token type contracts can be made Holographable.
Protocol Scope
Enforcers
have been limited to encourage developers to push the boundaries of what is possible. Holograph supports the enforcement of token standards, but will never prevent developers from maximizing their creativity.
Fungible Tokens
Minting
Developers should have the freedom to decide variables like token supply, distribution, and emissions.
Transfers
Custom
contracts may initiate transfers for any wallet and for any amount. There may be scenarios (e.g., responding to legal actions, deny listing, DAO approved overrides, etc.) where a token contract may need to override a standard and initiate a transfer.
Bridging
When fungible tokens are bridged, they are burned on the source chain and minted on the destination chain. No matter the smart contract logic being used, the tokens leaving the source chain will be burned before allowing them to be minted on the destination chain.
Reverting or Blocking Transactions
Custom
contracts should be able to revert or block enforced standard function calls via connected event hooks.
Non-Fungible Tokens
Minting
Custom
contracts should be able to call the mint function as many times as it wants. Enforcers
will never restrict or control this aspect of the standard.
A Custom
contract that is minting on an originally configured network will be able to assign any token ID within a 28 byte range. The remaining 4 bytes are prepended with zeros to make a 32 byte token ID. All subsequent mints, no matter what the chain, will have the 28 byte token ID prepended with a 4 byte chain ID.
// final token ID
uint256 token;
// variables defined by Enforcer
uint32 originChain = 0xffffffff;
uint32 currentChain = 0xfffffffe;
// custom contract sets tokenId for minting
uint224 tokenId = 0x00000000000000000000000000000000000000000000000000000001;
// Enforcer compares chain data
if (currentChain() == originChain) {
// minting on original chain, prepend with 0s
token = abi.encodePacked(0x00000000, tokenId);
// token == 0x0000000000000000000000000000000000000000000000000000000000000001
// token == 1
} else {
// minting on foreign chain, prepend with chain ID to prevent token ID conflicts
token = abi.encodePacked(currentChain,tokenId);
// token == 0xfffffffe00000000000000000000000000000000000000000000000000000001
// token == 115792089183396302089269705419353877679230723318366275194376439045705909141505
}
Transfers
Custom
contracts should be able to initiate a transfer for any wallet and for any token ID.
Bridging
NFTs are unique, meaning that there should never be more than one copy of it. Since all non-fungible properties of an NFT (address, ID, etc.) can be Holographed
to the destination chain, it is unnecessary to keep a version of it on the source chain. With this in mind, when an NFT is bridged, it is burned on the source chain and minted on the destination chain.
Burning
Custom
contracts should be able to initiate a burn function for any wallet and for any token ID.
Reverting or Blocking Transactions
Custom
contracts should be able to revert or block function calls via connected event hooks.
URIs
Enforcers
do not store token URIs. It is up to developers to decide how to implement and pass token URIs to Enforcers
. At the heart of every NFT is the token URI, which is a reference to a JSON payload. Token URIs can be implemented in a variety of ways (e.g., generative on-chain SVGs). Because of this, Enforcers
pass on token URI requests to Custom
contracts, allowing them to decide and define what the URI will return.