Technical Overview of Enervator
Below is a technical overview of Enervator.
*Enervator is described in more detail in Steve Huckle’s PhD Thesis. Some of the information here borrows excerpts from that work.
Enervator, which has a token symbol EOR, is an ERC777 token contract that inherits from OpenZeppelin’s implementation of ERC777. It aims to incentivise energy efficiency. Figure 1, below, shows that several other contracts support the token. They chiefly manage the supply and value of EOR and allow the exchange of sovereign currencies for the token.
Figure 1: Enervator class diagram
EnervatorManager is the default operator of Enervator. It holds the supply of EOR and sets the parameters that derive EOR’s value.
EnervatorManager inherits from OpenZeppelin interfaces, IERC777Sender and IERC777Recipient, which provide definitions of hook functions that
EnervatorManager implements. Those functions are called when EOR are sent or received. In particular,
EnervatorManager implements the
tokensToSend hook so that it calls a function from the
Exchanger contract that updates the
BuyDB contract with details of the tokens sent. As well as the
BuyDB contract, the
Exchanger contract maintains links to the
Forex contract, which has functions that set and get the US Dollar exchange rates for sovereign currencies, and the
DepositDB contract, which contains sovereign currency deposits. Those deposits govern the amount of EOR that can be bought.
Enervator is interfaced by two demos’ (please read ‘Loading Eneradmin and Enerchanger’, below, before trying to load the apps’ in your browser):
Eneradmin is responsible for managing Enervator. It mainly interacts with the
EnervatorManager contract, described above. Figure 2, below, shows that it manages the supply of EOR, as well as setting the token’s value parameters and the sovereign currency US Dollar exchange rates. You do not (should not) have permissions to set any parameters with Eneradmin, but you can read both the token’s parameters and any exchange rates that have been set.
Figure 2: Eneradmin use case diagram
Enerchanger converts those exchange rates into their equivalent EOR value. It mainly interacts with the
Exchanger contract, described above. Figure 3, below, shows that it is a proof of concept that simulates depositing cash and buying EOR. To use
Enerchanger, first deposit some cash (imagine that’s a PayPal link or some such like), then use that deposit to buy some EOR.
Figure 3: Enerchanger use case diagram
Enerchanger are web-based applications written in React. They employ a Redux state container that governs interactions with Ethereum via ethers.js, which uses web3.js as a provider, via the browser extension MetaMask. They also implement type-safety through Typescript. They are built and bundled using webpack.
Enervator is deployed at address 0x5483b2996BBa07330E188Fe10BB101d4c1Ac8530 on Ethereum’s Rinkeby Test Network.
webpack bundled apps Eneradmin and Enerchanger are deployed to dat, which is a peer-to-peer distributed data protocol. They are kept online via homebase, which is daemonised, via pm2, on a server with the dat tools installed.
An alternative to dat is ipfs. However, in this author’s opinion, dat is significantly easier to deploy and maintain than ipfs, not least because, with dat, you can copy new files to the same directory, and keep the same hash address. With ipfs, new files results in a new hash (although, I think there are ways to use DNS to circumvent that). Additionally, this author struggled to keep ipfs resources pinned and online, whereas homebase manages that seamlessly. Finally, dat appears much less corporate than ipfs.
Loading Eneradmin and Enerchanger
To load Eneradmin and Enerchanger in a web browser, you will need to be running Firefox with the Dat P2P Protocol and MetaMask extensions installed. MetaMask should be pointing at the Rinkeby Test Network, and you will need a few test Ether in your MetaMask wallet - you can get those from the Rinkeby Faucet.
Figure 4: The Enerchanger frontend interface