10. 10
POWERCHAIN
UC1: Setup Grid
The smallest possible grid is a Termination with an approved Metering …
metering = instanceByName('Metering');
termination = instanceByName('Termination');
termination.addMetering(metering.address);
11. 11
POWERCHAIN
UC2: Adding a Producer and a Consumer Node
In order to exchange power two Nodes are required.
For the moment both connect to the same Termination which accepts only one Metering.
params =[metering.address];
nodes.A = instanceByName('Node',params);
nodes.B = instanceByName('Node',params);
Metering assigns two new Meters to those Nodes and adds to Termination.
meters.A= instanceByName('Meter', [0,true]); // Initial Reading 0 – Does Feed In to the grid (=true)
meters.B= instanceByName('Meter', [7,false]); // Initial Reading 7 – Does Feed Out of the grid (=false)
metering.addMeter(meters.A.address,nodes.A.address);
metering.addMeter(meters.B.address,nodes.B.address);
termination.addNode(nodes.A.address);
termination.addNode(nodes.B.address);
nodes.A.transferTermination(termination.address);
nodes.B.transferTermination(termination.address);
12. 12
POWERCHAIN
UC3: Update Meter Readings
Metering provides an oracle by updating periodically readings of Meters.
As consequence of updateReading() all active PowerDelivery contracts of the affected Node
get balanced to the current reading.
metering.updateReading(meters.A.address,new Date().getTime(),123); // Sets Current reading of Meter A to 123
metering.updateReading(meters.B.address,new Date().getTime(),456); // Sets Current reading of Meter B to 456
updateReading() processPowerDelivery() updateReading()
balance
• Last Reading
• Power Debit
• Power Credit
13. 13
POWERCHAIN
UC3: Update Meter Readings (cont…)
updateReading()
• Last Reading
• Power Debit
• Power Credit
Last Reading
Actual readig of Meter
Power Credit
Power units (Wh) measured and covered by power delivery contracts
Power Debit
Power units (Wh) measured but not covered by power delivery contracts
Condition:
(Last Reading – Initial Reading*) = Power Credit + Power Debit
*) Initial Reading is reading of Meter as given in new Meter tx: instanceByName('Meter', [7,true]); // Initial Reading=7
14. 14
POWERCHAIN
UC4: Creating a Power Product
In order to trade on a market a product needs to be available having a common specification of the asset.
PowerDelivery contracts hold a common specification for a „power product“. As every Node needs to follow
this standard it could be traded/exchanged.
node.createOffer(
bool _is_feedin, // Perspective of Node (Is Feed-In or Feed-Out)
uint256 _time_start, // Start of Delivery
uint256 _time_end, // End of Delivery
uint256 _total_power, // Total Power in Watt-Hours
uint256 _peak_load, // Max-Load in Watt
uint256 _min_load, // Min-Load in Watt
uint256 _bid // Bid of creating Node (Monetary Value)
);
node.createOffer() New ProductDelivery()
15. 15
POWERCHAIN
UC5: Signing a Power Delivery (Contract)
A power delivery contract could be signed by any other Node. During signature process
it is checked if Termination (physical connection) is possible.
node.signSellFeedIn(PowerDelivery.address,_bid); // _bid = counter offer needs to be better or equal
…
node.signBuyFeedOut(PowerDelivery.address,_bid); // _bid = counter offer needs to be better or equal
PowerDelivery contract accepts changes of counter bid until starting time of delivery.
17. 17
POWERCHAIN
#Blockchain - Consense
In general a Blockchain holds an „universe of common truth“ = Consense
Node
Termination
Meter
Metering
Power
Delivery
Shared
Truth
18. 18
POWERCHAIN
#Blockchain - Visibility
• All transactional data is public within its chain
• Mining provides confirmations of transactions
Meter
Power
Delivery
Meter
Producer Contract Consumer
If all transactions get confirmed, we do not need to identify „Producer“ or „Consumer“ to ensure consense.
“On the blockchain, nobody knows you're a fridge”
19. 19
POWERCHAIN
#Blockchain - Transactionalization
• Storing data in a blockchain is expensive
• Each transaction costs a fee (or gas)
Meter
Power
Delivery
Contract Consumer
Provides sub-second readings
Might be one single transaction
Metering
Provided oracalized data as required
20. 20
POWERCHAIN
#Blockchain - In/Off Chain
• Transactional Data is required in chain
• Operational Data is required off chain
Power
Delivery
Metering
Provided oracalized data as required (In Chain)
Termination Operational Data on Request (Off Chain)
21. 21
POWERCHAIN
#Blockchain - Off Chain
• Offchain transactions like data exchange can still be part of a single shared truth
• EDIchain is a framework to exchange EDI messages via a Blockchain
MeteringTermination
EDI Message
CONTRL/APERAK
Metadata
Business
Content
(EDI Document)
HASH
On Chain (Frontend)
Off Chain (Backend)
22. POWERCHAIN
#Smart Contract
• Simple rule based transaction trigger.
• Or: Changing the state of a machine (blockchain) based on conditions.
Power
Delivery
If all prerequisites are met…
feed_in=Node(msg.sender);
… sending Node becomes
Producer
23. POWERCHAIN
#Smart Contract
• The code is the rule
• Once published the rules can not be changed.
Termination
The test() function is called as soon as a Node wants to sign a PowerDelivery.
For the owner of a Termination it might be good to keep record of all tests…
tests.push(_delivery);
… as this would change a value this function „call“ becomes a transaction (=requires Gas).
24. POWERCHAIN
#Smart Contract
• Use „Events“ for monitoring instead of transactions
tests.push(_delivery);
contract Termination {
…
event TestTermination(address _sender,address _target);
…
function test(Node _delivery,Termination callstack) returns (bool) {
TestTermination(msg.sender,_delivery);
…
}
25. POWERCHAIN
#Smart Contract
• The code is the rule
• Once published the rules can not be changed.
Termination v1
As v1 is available within the blockchain „forever“ there needs to be a sunset function right
from start
Termination v2
26. POWERCHAIN
#Node (Blockchain)
• Never trust a Node … trust transactions.
meters.A= instanceByName('Meter', [0,true]);
Everyone could create a Meter
But it requires a Metering to add it.
metering.addMeter(meters.A.address,nodes.A.address);
Contract Metering {
function addMeter(Meter meter,Node _node) {
if(msg.sender!=owner) throw;
…
}
}
Everyone could create a Metering
But it requires a Termination to accept it.
Everyone could create a PowerDelivery
But if there is no Termination (peering) between both parties it will not be possible to sign.
Peer2Peer energy markets are not a new topic. Even with blockchain technologies like Ethereum there are some basic concepts. What is missing is are standards and a level of industrialization.