1. Anasayfa
  2. 100 Günde Solidity

🧵 100GündeSolidity 066 : Time Lock

🧵 100GündeSolidity 066 : Time Lock
Time Lock
0

Time Lock Kullanımı

Time Lock, Ethereum platformunda yaygın olarak kullanılan bir akıllı sözleşme türüdür. Bu sözleşmeler, belirli bir süre boyunca belirli bir işlemi gerçekleştirmeyi engelleyerek güvenliği arttırır. Time Lock, özellikle DAO’lar (Merkeziyetsiz Otonom Organizasyonlar) gibi, toplu olarak alınan kararların gerçekleştirilmesinde kullanılır. Bu yazıda, Solidity’de Time Lock kullanımını inceleyeceğiz ve bu konunun detaylarını ele alacağız.

Time Lock Nedir?

Time Lock, belirli bir işlemin gerçekleştirilmesini belirli bir süre geciktiren bir akıllı sözleşme türüdür. Time Lock’lar, Ethereum platformunda sıklıkla kullanılır ve belirli bir süre boyunca bir işlemi engelleyerek güvenliği arttırır. Bu süre, genellikle birkaç saat veya gün olarak belirlenir ve bu süre sonunda işlem otomatik olarak gerçekleştirilir. Time Lock’lar, özellikle DAO’lar gibi merkeziyetsiz organizasyonların karar alma süreçlerinde sıkça kullanılır.

Time Lock’lar, gerçekleştirilecek bir işlemin onaylanmasından önce belirli bir bekleme süresi uygulayarak, kararların daha düşünülmüş ve daha sağlam bir şekilde alınmasını sağlar. Ayrıca, bu bekleme süresi, olası hataların ve dolandırıcılıkların önlenmesine de yardımcı olur.

Time Lock Nasıl Çalışır?

Time Lock, bir akıllı sözleşme olarak tasarlanmıştır ve Ethereum blockchain’inde çalışır. Bu sözleşmeler, belirli bir süre boyunca belirli bir işlemi gerçekleştirmeyi engelleyerek güvenliği arttırır. İşleyiş süreci aşağıdaki adımlardan oluşur:

  1. Bir kullanıcı, Time Lock’a bir işlem gönderir.
  2. Time Lock, işlemi aldıktan sonra, belirli bir süre boyunca işlemi onaylamayı engeller.
  3. Belirtilen süre sonunda, işlem otomatik olarak gerçekleştirilir.

Bu süre, akıllı sözleşmenin oluşturulduğu sırada belirlenir ve genellikle birkaç saat veya gün olarak belirlenir. Sürenin sona ermesi, bir blok numarası veya belirli bir tarih ve saat şeklinde belirtilebilir.

Time Lock’lar, özellikle DAO’lar gibi merkeziyetsiz organizasyonların karar alma süreçlerinde sıklıkla kullanılır. DAO üyeleri, belirli bir süre içinde bir işlemi onaylamak için oy kullanabilirler ve bu süre sonunda oylar toplanır ve işlem gerçekleştirilir. Bu süreç, daha sağlam ve düşünülmüş kararlar alınmasına ve dolandırıcılıkların önlenmesine yardımcı olur.

Solidity’de Time Lock Nasıl Oluşturulur?

Solidity, Ethereum platformunda kullanılan akıllı sözleşmelerin yazılmasına ve uygulanmasına olanak sağlayan bir programlama dilidir. Solidity ile bir Time Lock akıllı sözleşmesi oluşturmak oldukça kolaydır. İşleyiş süreci aşağıdaki adımlardan oluşur:

  1. Time Lock akıllı sözleşmesi oluşturulur.
  2. Sözleşmede, gönderilecek işlemin detayları ve süresi belirtilir.
  3. Sözleşme, işlem gönderildiği anda, işlemi onaylamayı engelleyecek bir bekleme süresi başlatır.
  4. Belirtilen süre sonunda, işlem otomatik olarak gerçekleştirilir.

Örneğin, aşağıdaki Solidity kodu, bir Time Lock sözleşmesi oluşturur:

pragma solidity ^0.8.0;

contract TimeLock {
    uint256 public releaseTime;
    address public owner;
    uint256 public amount;

    constructor(uint256 _releaseTime, address _owner, uint256 _amount) payable {
        require(_releaseTime > block.timestamp);
        releaseTime = _releaseTime;
        owner = _owner;
        amount = _amount;
    }

    function release() public {
        require(block.timestamp >= releaseTime);
        require(msg.sender == owner);
        payable(owner).transfer(amount);
    }
}

Bu kod, bir Time Lock akıllı sözleşmesi oluşturur. Sözleşmede, belirli bir süre sonunda gerçekleştirilecek bir işlem belirtilir. İşlemi gerçekleştirecek kişi de belirtilir. Bu sözleşme, işlemi belirtilen sürenin sonunda otomatik olarak gerçekleştirir.

Time Lock Örnekleri ve Kullanım Alanları

Time Lock’lar, özellikle merkeziyetsiz organizasyonlar (DAO’lar) gibi karar alma süreçlerinin olduğu yerlerde kullanılır. Bu sözleşmeler, işlemlerin belirli bir süre boyunca onaylanmasını engelleyerek, kararların daha sağlam ve düşünülmüş bir şekilde alınmasına yardımcı olur. Ayrıca, dolandırıcılıkları da önler. İşte Time Lock’ların kullanım alanlarından bazıları:

  1. DAO’lar: DAO’lar, merkeziyetsiz organizasyonlardır ve üyelerinin oy kullanarak kararlar almasını sağlarlar. Bu kararlar, belirli bir süre sonunda uygulanır. Time Lock’lar, bu sürenin sonunda otomatik olarak işlemleri gerçekleştirerek, kararların uygulanmasını sağlar.
  2. Ödeme Sistemleri: Time Lock’lar, ödeme sistemlerinde de kullanılabilir. Örneğin, bir işveren, bir çalışanın maaşını belirli bir tarihte ödemeyi taahhüt edebilir. Time Lock, ödemenin belirtilen tarihte otomatik olarak gerçekleştirilmesini sağlar.
  3. Yatırım Sözleşmeleri: Time Lock’lar, yatırım sözleşmelerinde de kullanılabilir. Örneğin, bir yatırımcı, bir projeye yatırım yaptığında, belirli bir süre boyunca çekilmemesi şartıyla yatırımını geri almayı taahhüt edebilir. Time Lock, belirtilen sürenin sonunda otomatik olarak geri ödeme işlemini gerçekleştirir.
  4. Ödeme Kanıtları: Time Lock’lar, ödeme kanıtları için de kullanılabilir. Örneğin, bir satıcı, bir malın ödemesini aldığında, belirli bir süre boyunca malı göndermeyi taahhüt edebilir. Time Lock, belirtilen sürenin sonunda malı göndermeyi otomatik olarak sağlar.

Bu kullanım örnekleri, Time Lock’ların çeşitli alanlarda kullanılabileceğini göstermektedir.

Time Lock’ların Avantajları ve Dezavantajları

Time Lock’ların avantajları şunlardır:

  1. Güvenlik: Time Lock’lar, işlemlerin otomatik olarak gerçekleştirilmesini sağlar. Bu, insan hatası riskini azaltır ve dolandırıcılıkları önler.
  2. Esneklik: Time Lock’lar, belirli bir süre sonunda işlemlerin gerçekleştirilmesini sağlar. Bu, ödeme taahhütlerinin veya yatırımların geri ödeme sürelerinin daha esnek hale gelmesini sağlar.
  3. Doğrulanabilirlik: Time Lock’lar, işlemlerin otomatik olarak gerçekleştirilmesini sağlar. Bu, işlemlerin doğrulanmasını kolaylaştırır.

Time Lock’ların dezavantajları şunlardır:

  1. Yüksek Gas Ücretleri: Time Lock’lar, işlemleri otomatik olarak gerçekleştirirken, gas ücretlerinin de ödenmesi gerekir. Bu, işlemlerin daha pahalı hale gelmesine neden olabilir.
  2. Risk: Time Lock’lar, belirli bir süre boyunca işlemlerin gerçekleştirilmesini engeller. Ancak, bu süre zarfında, fiyatlar veya piyasa koşulları değişebilir. Bu, yatırımcılar için bir risk oluşturabilir.
  3. Geri Dönüş Yok: Time Lock’lar, işlemlerin otomatik olarak gerçekleştirilmesini sağlar. Bu, işlemlerin geri döndürülemez olduğu anlamına gelir. Bu nedenle, yanlışlıkla yapılan işlemler geri alınamaz.

Bu avantajlar ve dezavantajlar, Time Lock’ların kullanımıyla ilgili düşünülmesi gereken faktörleri gösterir.

Time Lock’ların Alternatifleri ve Benzerleri

Time Lock’ların alternatifleri ve benzerleri şunlardır:

  1. Multisig Contracts: Multisig Contracts, birden fazla imza gerektiren sözleşmelerdir. Bu sözleşmeler, belirli bir süre sonunda otomatik olarak işlemleri gerçekleştirmez, ancak belirli sayıda imza toplanmadan işlemlerin gerçekleştirilmesine izin vermez. Bu da güvenliği artırır.
  2. Smart Contracts: Smart Contracts, belirli koşullara bağlı olarak işlemleri otomatik olarak gerçekleştirebilen akıllı sözleşmelerdir. Bu sözleşmeler, belirli bir süre sonra işlemleri gerçekleştirirken, programlanmış bir dizi koşula bağlı kalır.
  3. Timed Escrow Contracts: Timed Escrow Contracts, belirli bir süre sonra işlemleri otomatik olarak gerçekleştiren sözleşmelerdir. Ancak, bu sözleşmelerde ödemeler, taraflar arasında belirlenmiş bir depozitoya yerleştirilir ve belirli bir süre sonunda geri alınabilir.

Bu alternatifler ve benzerler, farklı durumlarda kullanılabilen farklı çözümleri sunar. Bununla birlikte, Time Lock’lar, özellikle DAO’lar gibi belirli senaryolarda kullanılabilir en iyi çözümdür.

Time Lock’ların Güvenliği ve Riskleri

Time Lock’ların güvenliği, doğru bir şekilde programlandıkları sürece yüksek olabilir. Ancak, bazı riskler de vardır.

  1. Smart Contract Riskleri: Time Lock’lar, bir akıllı sözleşme olarak programlandığı için, programlama hatalarına veya zayıf noktalara karşı savunmasız olabilir. Bu, sözleşmelerin saldırılara maruz kalmasına ve fonların kaybedilmesine neden olabilir.
  2. Fiyat Riskleri: Time Lock’lar, belirli bir süre sonra işlemleri gerçekleştirir. Ancak, bu süre zarfında, fiyatlar veya piyasa koşulları değişebilir. Bu, yatırımcılar için bir risk oluşturabilir.
  3. İşlem Riskleri: Time Lock’lar, belirli bir süre sonra otomatik olarak işlemleri gerçekleştirir. Ancak, belirli bir işlemin gerçekleşmesi için belirli bir blok teyit süresi gerekebilir. Bu nedenle, bir işlemin blok zincirinde doğrulanması için yeterli süre verilmelidir.
  4. Gas Ücretleri: Time Lock’lar, işlemleri otomatik olarak gerçekleştirirken, gas ücretlerinin de ödenmesi gerekir. Bu, işlemlerin daha pahalı hale gelmesine neden olabilir.

Bu riskler, Time Lock’ların kullanımı sırasında dikkate alınmalı ve önlemler alınmalıdır. Bu önlemler, akıllı sözleşmenin doğru bir şekilde programlanması, işlem onayları ve gas ücretlerinin dikkatli bir şekilde yönetilmesini içerebilir.

Akıllı Sözleşme Örneği İnceleme

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract TimeLock {
    error NotOwnerError();
    error AlreadyQueuedError(bytes32 txId);
    error TimestampNotInRangeError(uint blockTimestamp, uint timestamp);
    error NotQueuedError(bytes32 txId);
    error TimestampNotPassedError(uint blockTimestmap, uint timestamp);
    error TimestampExpiredError(uint blockTimestamp, uint expiresAt);
    error TxFailedError();

    event Queue(
        bytes32 indexed txId,
        address indexed target,
        uint value,
        string func,
        bytes data,
        uint timestamp
    );
    event Execute(
        bytes32 indexed txId,
        address indexed target,
        uint value,
        string func,
        bytes data,
        uint timestamp
    );
    event Cancel(bytes32 indexed txId);

    uint public constant MIN_DELAY = 10; // seconds
    uint public constant MAX_DELAY = 1000; // seconds
    uint public constant GRACE_PERIOD = 1000; // seconds

    address public owner;
    // tx id => queued
    mapping(bytes32 => bool) public queued;

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        if (msg.sender != owner) {
            revert NotOwnerError();
        }
        _;
    }

    receive() external payable {}

    function getTxId(
        address _target,
        uint _value,
        string calldata _func,
        bytes calldata _data,
        uint _timestamp
    ) public pure returns (bytes32) {
        return keccak256(abi.encode(_target, _value, _func, _data, _timestamp));
    }

    /**
     * @param _target Address of contract or account to call
     * @param _value Amount of ETH to send
     * @param _func Function signature, for example "foo(address,uint256)"
     * @param _data ABI encoded data send.
     * @param _timestamp Timestamp after which the transaction can be executed.
     */
    function queue(
        address _target,
        uint _value,
        string calldata _func,
        bytes calldata _data,
        uint _timestamp
    ) external onlyOwner returns (bytes32 txId) {
        txId = getTxId(_target, _value, _func, _data, _timestamp);
        if (queued[txId]) {
            revert AlreadyQueuedError(txId);
        }
        // ---|------------|---------------|-------
        //  block    block + min     block + max
        if (
            _timestamp < block.timestamp + MIN_DELAY ||
            _timestamp > block.timestamp + MAX_DELAY
        ) {
            revert TimestampNotInRangeError(block.timestamp, _timestamp);
        }

        queued[txId] = true;

        emit Queue(txId, _target, _value, _func, _data, _timestamp);
    }

    function execute(
        address _target,
        uint _value,
        string calldata _func,
        bytes calldata _data,
        uint _timestamp
    ) external payable onlyOwner returns (bytes memory) {
        bytes32 txId = getTxId(_target, _value, _func, _data, _timestamp);
        if (!queued[txId]) {
            revert NotQueuedError(txId);
        }
        // ----|-------------------|-------
        //  timestamp    timestamp + grace period
        if (block.timestamp < _timestamp) {
            revert TimestampNotPassedError(block.timestamp, _timestamp);
        }
        if (block.timestamp > _timestamp + GRACE_PERIOD) {
            revert TimestampExpiredError(block.timestamp, _timestamp + GRACE_PERIOD);
        }

        queued[txId] = false;

        // prepare data
        bytes memory data;
        if (bytes(_func).length > 0) {
            // data = func selector + _data
            data = abi.encodePacked(bytes4(keccak256(bytes(_func))), _data);
        } else {
            // call fallback with data
            data = _data;
        }

        // call target
        (bool ok, bytes memory res) = _target.call{value: _value}(data);
        if (!ok) {
            revert TxFailedError();
        }

        emit Execute(txId, _target, _value, _func, _data, _timestamp);

        return res;
    }

    function cancel(bytes32 _txId) external onlyOwner {
        if (!queued[_txId]) {
            revert NotQueuedError(_txId);
        }

        queued[_txId] = false;

        emit Cancel(_txId);
    }
}

Bu akıllı sözleşme, Ethereum blok zincirinde, belirli bir süre boyunca bir işlemi erteleyebilen bir zaman kilidi olarak hizmet verir. İşlevi, önceden belirlenmiş bir tarihe kadar işlemi erteleyen, bu tarihten sonra işlemi gerçekleştiren veya işlemi iptal eden bir işlevi içerir.

İşlevsellik açısından, bu akıllı sözleşme, özel işlevlere sahiptir. “queue” işlevi, bir işlemi zaman kilidine eklemeyi sağlar. “execute” işlevi, zaman kilidi süresi dolan bir işlemi gerçekleştirir. “cancel” işlevi ise zaman kilidine eklenen bir işlemi iptal eder. Ayrıca, “getTxId” işlevi, işlemleri benzersiz bir kimlikle tanımlar.

Güvenlik açısından, akıllı sözleşme, birden çok hata yakalama işleviyle donatılmıştır. Örneğin, “AlreadyQueuedError” hatası, bir işlemin zaten zaman kilidine eklenmiş olması durumunda tetiklenir. “TimestampNotInRangeError” hatası, işlemin tarih aralığının belirtilen aralığın dışında olması durumunda tetiklenir. Ayrıca, yalnızca sözleşmenin sahibi tarafından çağrılabilecek “onlyOwner” modifiye edicisi de bulunur.

Verimlilik açısından, bu akıllı sözleşme oldukça verimlidir. Tek bir blokta işlem yapar ve işlem yaparken çok az gaz tüketir. Ayrıca, zaman kilidi süresinin önceden belirlenmesi sayesinde, işlemler önceden planlanabilir ve daha verimli bir şekilde yönetilebilir.

Genel olarak, bu akıllı sözleşme, bir zaman kilidi olarak hizmet verir ve işlemleri yönetmek için güvenli ve verimli bir yöntem sağlar. Hata yakalama işlevleri ve yalnızca sözleşmenin sahibi tarafından çağrılabilen işlevler, sözleşmenin güvenliğini artırırken, tek bir blokta işlem yapma özelliği, verimliliği artırır.

Time Lock’ların Geleceği ve Gelişmeleri

Time lock teknolojisi, blockchain teknolojisi ve akıllı sözleşmelerin gelişimi ile birlikte daha da yaygınlaşacağı ve kullanım alanlarının genişleyeceği öngörülmektedir. Geliştiriciler, bu teknolojinin daha da güvenli hale getirilmesi, kullanımının daha da kolaylaştırılması ve daha fazla esneklik sağlaması için çalışmalar yapmaktadırlar.

Bununla birlikte, zaman kilitleri ile ilgili bazı zorluklar da vardır. Örneğin, zamanlamayla ilgili hatalar veya aksaklıklar, zaman kilitlerinin işlevselliğini etkileyebilir. Ayrıca, özellikle merkeziyetsizleştirilmiş sistemlerde, bir akıllı sözleşme için gerekli olan tüm bilgilerin önceden sağlanması gerektiğinden, zaman kilitleri bazen kısıtlayıcı olabilir.

Bu nedenle, gelecekte, geliştiriciler zaman kilitlerinin bu tür sorunlarını gidermek için yeni çözümler arayacaklar ve teknolojinin daha da geliştirilmesine katkıda bulunacaklardır. Ayrıca, zaman kilitleri, diğer blockchain tabanlı teknolojilerle birlikte kullanılarak, daha karmaşık ve güçlü sözleşmelerin oluşturulmasına yardımcı olabilir.

Sonuç Bağlamı

Time Lock’lar, blockchain teknolojisinin sağladığı avantajlarla birlikte güvenli, şeffaf ve otomatik işlemlerin gerçekleştirilmesine olanak sağlayan önemli bir araçtır. Bu araç, akıllı sözleşme teknolojisiyle birleştiğinde, yüksek güvenlikli ve tamamen otomatikleştirilmiş işlemler yapılabilmesine olanak sağlar.

Time Lock’ların birçok kullanım alanı bulunmaktadır, özellikle kripto para birimleri ve diğer blockchain varlıklarının yönetimi ve korunması gibi konularda oldukça faydalıdırlar. Ancak, bazı dezavantajları da vardır, örneğin işlem süreleri ve ücretleri gibi konularda bazı sınırlamaları olabilir.

Gelecekte, Time Lock’lar için yeni kullanım alanları ve geliştirmelerin ortaya çıkması muhtemeldir. Bu teknolojinin daha yaygın hale gelmesiyle birlikte, yeni ve daha gelişmiş Time Lock araçları ve uygulamaları geliştirilebilir. Bu da, blockchain teknolojisinin daha da güvenli, verimli ve kullanıcı dostu hale gelmesine yardımcı olabilir.

Solidity Programlama Dili Öğrenme yolculuğunuz hakkında daha iyi rehberlik almak için Solidity nedir? Ethereum Akıllı Sözleşmelerinin Dili Rehberi içeriğimize göz atın. Dilerseniz Yeni Başlayanlar için Solidity – Akıllı Sözleşme Geliştirme Hızlandırılmış Kursuna katılın.

Çalışmaya nereden başlayacağım diyenler için Blockchain ​​Developer Olmak İçin Yol Haritası içeriğine de muhakkak bakın.

Gelin aklınızdaki soruları SUPERPEER sohbetinde cevaplayalım.

Bu makaleyi okuduğunuz için teşekkürler! Bana destek olmak isterseniz;

Beni TwitterLinkedin ve YouTube‘da takip edin.

Kısa bir yorum bırakmayı UNUTMAYIN!

solidity101 - Solidity, 2015 yılında Christian Reitwiessner liderliğinde piyasaya sürülen, büyük harf kullanımına göre ikinci en büyük kripto para piyasası olan Ethereum tarafından oluşturulan yepyeni bir programlama dilidir.

Yazarın Profili
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir