Blokzinciri ile nasıl enerji pazarı oluşturulur?

Enerji endüstrisi, blokzinciri teknolojisi için en uygun kullanım senaryolarına sahip endüstrilerin başında geliyor. Merkezi olmayan enerji pazarları, yenilenebilir enerji kaynakları gibi pek çok senaryoda blokzinciri çok büyük değer yaratabilir.

Blokzinciri çözümleri tasarlayan Alberto Cuesta Cañada, Hackernoon’da kaleme aldığı makalesi ile elektrik piyasalarının nasıl çalıştığını ve enerji dağıtımını, ödemelerle nasıl ilişkilendirebileceğini çözmek için bir beyin fırtınasını okuyucularla paylaşıyor. Okuyucularımız için özetledik;

Elektrik şebekeleri nasıl çalışır?

Özetle, elektrik şebekeleri üretimi tüketimle eşleştirir. Dizüstü bilgisayarım bu makaleyi yazdığım iki saat boyunca 200 watt elektrik harcıyorsa, birisinin aynı elektrik ağına aynı zaman diliminde 200 watt elektrik vermesi gerekir.

Üreticiler ve tüketiciler arasındaki mesafeler nedeniyle elektriğin transferi esnasında kayıplar yaşanır ve bu kayıpları azaltmak için gücü doğru yerlere yönlendiren bir ağ olması gerekir. Temelinde elektrik şebekeleri bu mantıkla çalışır.

Bu senaryoda genellikle dört aktör vardır: Üreticiler, dağıtıcılar, perakendeciler ve tüketiciler.

  • Üreticiler ağa verilen elektriği üretir ve bunun için kendilerine ödeme yapılır.
  • Dağıtıcılar elektriği üreticilerden tüketicilere taşıyan ağı işletir.
  • Perakendeciler üreticilerden elektrik alıp tüketicilere satarlar.
  • Tüketiciler, üreticilerden toptan satın alınan elektriği perakendecilerden satın alırlar.

Bu süreç elektriğin stoklu şekilde alınıp dağıtıldığı geleneksel tedarik zincirine benzemez. Satın alınan ve satılan elektrik bir çeşit sertifikadır. Bu şekliyle daha çok hisse senetlerine benzer.

Her üretici elektriği ağa verirken bu sertifikaları alır. Bir tüketicinin ağdan elektrik alabilmesi için, alınan elektrik miktarınca yeterli sertifikaya sahip olması gerekir. Aynı sertifikayı iki kez satmasına veya kullanmasına izin verilmez.

Sistem en azından son 100 yıldır böyle çalışıyordu.

Merkezi üretim, çok sayıda tüketici için elektrik üreten büyük enerji santralleri anlamına geliyordu.

Enerji akışı geleneksel olarak dağıtım ağı üzerinden üreticilerden tüketicilere olmuştur. Para akışı ise tüketicilerden üreticilere, perakendeciler aracılığıyla sağlanmıştır.

Yakın zamanlarda bu senaryo artık yavaş yavaş değişmeye başladı. Birçok ülkede artık evlerindeki güneş panelleri ile elektrik üreten çok sayıda tüketici var. Bu tüketicilerin aynı zamanda üretici de olmaya başladıkları anlamına geliyor ve bu üreticiler bazen ağa enerji de verebilirler.

Bu durum, enerji piyasasını çok daha karmaşık hale getiriyor. Bu yeni durumda fiyatlara kim karar verecek? Enerjiyi kim, nasıl satın alacak? Dağıtıcılar ağı nasıl dengeleyecek? Gerçekten ortada karmaşık ve ademi merkezi bir pazar var.

Bir süredir blokzinciri alanında bu sorunların çözümü için kafa yoran pek çok insan ve şirket var.

Senaryomuz

Biz senaryomuzda yenilenebilir enerji ticareti için bireysel bir üreticinin merkezinde yer aldığı durumu inceleyeceğiz. Dağıtımcıların enerji piyasasını işlettiğini ve elektrik üretimini ve tüketimini dengelemek için parasal teşvikler kullandığını varsayacağız.

Senaryolar benzer olmakla birlikte, gerçek dünya enerji piyasalarıyla aynı değildir. Ben olabildiğince kullanım durumunu daha genel hale getirmeye çalıştım.

Gerçek dünyada üreticiler, belirli bir zaman dilimi için enerji üretmek istedikleri fiyatları duyururlar. Perakendeciler üreticilerden elektriği genellikle sadece en düşük fiyatı seçerek alırlar. Ancak gerçek zamanlı olarak sürekli rekabetçi bir piyasada değişkenlik gösteren bu fiyat durumu blokzinciri platformları için hesaplama açısından çok yoğun bir iş yükü oluşturur.

Tasarım

Bu enerji pazarına yönelik en basit uygulama için, para birimi olarak bazı ERC20 belirteçlerini (token) ve ağdaki üretim ve tüketim yüklerini temsil etmek için iki değişken kullanacağız. Zamanı keyfi birimlere ayıracağız ve üretim ve tüketim yükünün her bir zaman birimi için mümkün olduğunca dengeli olmasını hedefleyeceğiz.

Uniswap pazarından biraz ilham alacağım ve belirli bir zaman birimi için tüketiciden daha fazla üretici olduğunda elektrik fiyatını düşüren basit bir fiyat formülü kullanacağım. Bu şekilde, tüketicileri daha fazla tüketmeye ve üreticileri daha az üretmeye ve ağı dengelemeye çalışan bir yaklaşım sunacağız. Tama ksi durumda ise, daha yüksek fiyatlar nedeniyle tüketici sayısı azalacağı ve üretici sayısı artacağı için fiyatlar yine kendilerini dengeleyecektir.

Özetle, elektrik şebekeleri üretimi tüketimle eşleştirir.

Dağıtım ağı fiyatı belirleyecek. Üreticiler dağıtım ağına elektrik satacaklar. Tüketiciler dağıtım şebekesinden elektrik satın alacaklar.

Pazar mekanizmasına odaklanmak için birçok karmaşık özelliği kaldırıyorum. Bununla birlikte blokzinciri teknolojisi ile ulusal bir enerji pazarına yönelik uygulamanın mümkün olduğuna inanıyorum, ancak bu makalenin amaçları için basit bir senaryo ile sınırlı kalacağız.

Uygulama

Uniswap tarzı bir pazarın ana yararı, çok basit olmasıdır. Bizim durumumuzda, tüm enerji ticareti pazarı yorumlarla birlikte 100’den az satıra sığar. Burada temel özellikleri açıklayacağım ve ardından tüm sözleşmeyi sizlerle paylaşacağım. Kodu anlamlandıramazsanız önemli değil. Önemli olan mantığı anlamanız.

Piyasanın bir miktar para ile tohumlanması gerekiyor. Bunun nedeni, tüketicilerden daha fazla üretici olabilmesidir ve pazar, üreticilere ödeme yaparken ve tüketicileri ücretlendirir.

Fiyatlar, üretim ve tüketim yükleri arasındaki farka dayalı olarak iki basit formülle hesaplanır. Tüketim ve üretim yükleri tam olarak eşleştiğinde, fiyat seçilen temel seviyedir.

Bu mekanizma, blokzincirinin sınırlı hesaplama gücüne uyan basit bir yaklaşımdır. Aynı zamanda üretimi ve tüketimi dengelemeye teşvik eder. Ağı her iki yönde dengesiz hale getirmenin parasal bir maliyeti vardır.

Akıllı sözleşmenin para akışını kontrol ettiğini ve üretim ve tüketim siparişlerinin genellikle gelecekteki zaman dilimleri için yerine getirileceğini anlamak önemlidir. Fiziksel dağıtım şebekesi, önerilen tüketim ve üretim yükleri hakkında bilgi sahibi olacak ve şebekeyi dengelemek için gerekirse bunları azaltmak için harekete geçebilecektir.

Enerji üretimine sadece belirli üreticilere izin verilir ve sadece üretme niyetlerini belirtmeleri gerekir ve hemen ödeme alırlar, bu piyasanın teşvik edilmesi için önemli bir motivasyons ağlar.

Enerji tüketimi aynı şekilde çalışır. Tüketiciler niyetlerini belirtir ve ağ tarafından belirlenen bedeli öderler. Gerçek hayatta, güç gerçekten tüketilmezse, bazı geri ödemeler olabilir.

Şimdi kodu paylaşayım;

pragma solidity ^0.5.10;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@hq20/contracts/contracts/access/Whitelist.sol";


/**
 * @title Energy Market
 * @notice Implements a simple energy market, using ERC20 and 
 * Whitelist. ERC20 is used to enable payments from the consumers to
 * the distribution network, represented by this contract, and from
 * the distribution network to the producers. Whitelist is used to
 * keep a list of compliant smart meters that communicate the
 * production and consumption of energy.
 */
contract EnergyMarket is ERC20, Whitelist {
  event EnergyProduced(address producer, uint256 time);
  event EnergyConsumed(address consumer, uint256 time);
  // uint128 is used here to facilitate the price formula
  // Casting between uint128 and int256 never overflows
  // int256(uint128) - int256(uint128) never overflows
  mapping(uint256 => uint128) public consumption;
  mapping(uint256 => uint128) public production;
  uint128 public basePrice;

  /**
   * @dev The constructor initializes the underlying currency token
   * and the smart meter whitelist. The constructor also mints the
   * requested amount of the underlying currency token to fund the
   * network load. Also sets the base energy price, used for 
   * calculating prices.
   */
  constructor (uint256 _initialSupply, uint128 _basePrice)
    public
    ERC20()
    Whitelist()
  {
    _mint(address(this), _initialSupply);
    basePrice = _basePrice;
  }

  /**
   * @dev The production price for each time slot.
   */
  function getProductionPrice(uint256 _time)
    public
    view
    returns(uint256)
  {
    return uint256(
      max(
        0,
        int256(basePrice) *
          (3 + safeSub(production[_time], consumption[_time]))
      )
    );
  }

  /**
   * @dev The consumption price for each time slot
   */
  function getConsumptionPrice(uint256 _time)
    public
    view
    returns(uint256)
  {
    return uint256(
      max(
        0,
        int256(basePrice) *
          (3 + safeSub(consumption[_time], production[_time]))
      )
    );
  }

  /**
   * @dev Add one energy unit to the distribution network at the
   * specified time and be paid the production price. Only
   * whitelisted smart meters can call this function.
   */
  function produce(uint256 _time)
    public
  {
    require(isMember(msg.sender), "Unknown meter.");
    this.transfer(
      msg.sender,
      getProductionPrice(_time)
    );
    production[_time] = production[_time] + 1;
    emit EnergyProduced(msg.sender, _time);
  }

  /**
   * @dev Take one energy unit from the distribution network at the
   * specified time by paying the consumption price. Only
   * whitelisted smart meters can call this function.
   */
  function consume(uint256 _time)
    public
  {
    require(isMember(msg.sender), "Unknown meter.");
    this.transferFrom(
      msg.sender,
      address(this),
      getConsumptionPrice(_time)
    );
    consumption[_time] = consumption[_time] + 1;
    emit EnergyConsumed(msg.sender, _time);
  }

  /**
   * @dev Returns the largest of two numbers.
   */
  function max(int256 a, int256 b)
    internal
    pure
    returns(int256)
  {
    return a >= b ? a : b;
  }

  /**
   * @dev Substracts b from a using types safely casting from
   * uint128 to int256.
   */
  function safeSub(uint128 a, uint128 b)
    internal
    pure
    returns(int256)
  {
    return int256(a) - int256(b);
  }
}

Lütfen kafanız karışmasın, kodu anlamanız gerekmiyor. Akış mantığını zaten izah ettim. Sadece bu işlemin ne kadar az kodla yapılabileceğini göstermek istedim.

Üzerinde Düşünmemiz Gerekenler

Senaryoyu sınırlı tutmak adına uygulanmayan bazı özellikler var. Bunlardan en önemlileri aşağıdaki gibi.

  • Üreticilere, üretmeye söz verdiklerinin aksine, yalnızca ürettikleri enerji için ödeme yapılmasını sağlayacak bir kontrol mekanizması yoktur.
  • Geçmişteki üretim ya da tüketim verilerini analiz ederek geleceğe dönük bir koruma mekanizması yoktur.
  • Ne üretim ne de tüketim siparişleri iptal edilemez.
  • Fiyatlandırma formülü basitleştirilmiştir ve matematiksel modellemeye ihtiyaç vardır.
  • Belirteçleri basmak için kurucu dışında bir mekanizma yoktur, bu nedenle sözleşme arzı değiştirilemez ve müşteriler gerçekte fon alamazlar.
  • Üretim ve tüketim siparişlerinin, mevcut yükle orantılı bir enerji miktarı için olmasına izin verilmelidir.
  • Mevcut uygulama, ulusal ölçekte düşük performans gösterecektir.

Bunlar sadece bazı örneklerdir. Lütfen bu sözleşmeyi öğrenme amaçları dışında veya daha gelişmiş sürümünüzü oluşturmak dışında olduğu gibi kullanmayın.

Sonuç

Enerji piyasaları blokzinciri teknolojisine doğal bir uyum sağlar. Mikro üretimin ortaya çıkmasıyla birlikte enerji ağları, mikro ölçekte hem tüketici hem de üretici olan bir müşteri ağına bölünmektedir.

Mevcut ağlar, tek yönlü güç akışı için inşa edildi ve para ters yönde aktı. Üreticilerin tüketicilerden binlerce veya milyonlarca kat daha büyük olması bekleniyordu. Fiziksel ağın yeniden yapılandırılması bir zorluk, ancak ödeme ağının yeniden oluşturulması farklı bir sorun.

Uniswap tarzı akıllı sözleşmeler kullanılarak blokzincirinde bir enerji pazarı inşa edilebilir. Bu, mevcut uygulamalar üzerinde radikal bir değişiklik getirmektedir. Ancak aynı zamanda piyasayı başarıyla dağıtır ve küçük üreticilere doğrudan erişim sağlar.

Şimdiye kadar okuduğunuz için teşekkürler. Bu zorlu bir projeydi ve bu noktaya ulaşmak son derece eğlenceliydi. Umarım faydalı da bulursunuz. Blokzinciri enerji pazarlarını keşfetmekle ilgileniyorsanız lütfen bana ulaşın, yardımcı olmaktan mutluluk duyarım.