Akıllı sözleşme (Smart Contract), Merkeziyetsiz Finans (DeFi), NFT, Token, Ethereum, ERC-20, ERC-721, ERC-1155 Nedir? Ethereum Geliştirme Ortamı Kurulumu ve Örnek Bir Blockchain Uygulaması Yazıyoruz

Akıllı Sözleşmeler: Blockchain Teknolojisinin Dijital Anlaşmaları

Geleneksel sözleşmeler, iş dünyasının temel yapı taşlarından biridir. İki veya daha fazla taraf arasında bir anlaşmanın resmi olarak belgelendiği, tarafların haklarını ve yükümlülüklerini belirlediği bu belgeler, iş süreçlerinin temelini oluşturur. Ancak teknolojinin hızla ilerlemesiyle birlikte, dijital dünyada daha akıllı, otomatik ve güvenli bir anlaşma yöntemi arayışı doğdu. İşte bu noktada, akıllı sözleşmeler devreye giriyor.

Bu makaleyi okumadan önce blockchain ve konsensüs mekanizmaları hakkında yazımı buradan inceleyebilirsiniz.

Akıllı Sözleşmelerin Temeli

Akıllı sözleşmeler, blockchain teknolojisinin bir ürünüdür. Blockchain, dağıtık bir defter teknolojisi olarak, verilerin güvenli ve şeffaf bir şekilde kaydedilmesini sağlar. Bu teknolojiyi temel alan akıllı sözleşmeler, geleneksel sözleşmelerin dijital bir versiyonu olarak düşünülebilir. Ancak akıllı sözleşmelerin en önemli farkı, kendilerini uygulayabilen ve işlem yapabilen kod parçaları içermeleridir.

Nasıl Çalışırlar?

Akıllı sözleşmeler, belirli bir blockchain ağı üzerinde çalışırlar. Ethereum gibi platformlar, akıllı sözleşmeleri desteklemek için özel olarak tasarlanmıştır. Bir akıllı sözleşme, bir dizi kod içerir ve bu kod, taraflar arasında gerçekleşecek olan işlemi tanımlar. Örneğin, bir ödeme işlemi, bir mal teslimatı veya belirli bir hizmetin sunumu gibi.

Akıllı sözleşmelerin çalışma mantığı, önceden belirlenmiş koşulların yerine gelmesine dayanır. Sözleşmenin tarafları, belirli koşulların gerçekleştiğini doğruladıklarında, sözleşme otomatik olarak devreye girer. Bu durum, genellikle belirli bir tarih, bir ödeme miktarı veya belirli bir etkinlik gerçekleştiğinde olur.

Potansiyel Avantajlar

Akıllı sözleşmelerin getirdiği potansiyel avantajlar oldukça çeşitlidir:

  1. Otomasyon: Geleneksel sözleşmelerde olduğu gibi manuel işlemlere gerek kalmaz. Akıllı sözleşmeler otomatik olarak çalıştığı için insan müdahalesi ihtiyacını azaltır.

  2. Hız ve Verimlilik: Akıllı sözleşmeler, işlemleri anında gerçekleştirir. Bu, iş süreçlerinin hızlanmasını ve verimliliğin artmasını sağlar.

  3. Güvenlik: Akıllı sözleşmeler, blockchain'in güvenlik özelliklerinden yararlanarak daha güvenli bir şekilde çalışır. Veriler değiştirilemez ve yetkisiz erişim riski düşer.

  4. Aracısızlık: Geleneksel sözleşmelerde aracı kurumlar genellikle yer alırken, akıllı sözleşmeler bu aracıları ortadan kaldırabilir, bu da maliyetleri ve işlem sürelerini düşürebilir.

Zorluklar ve Düşünülmesi Gerekenler

Akıllı sözleşmelerin getirdiği avantajların yanı sıra, bazı zorluklar ve düşünülmesi gereken yönler de vardır. Öncelikle, akıllı sözleşmelerin yazılım hataları içerebileceği ve bu hataların ciddi sonuçlara yol açabileceği unutulmamalıdır. Ayrıca, geleneksel hukuki yapıların yerine geçebilecekleri düşünülmemelidir; bazı durumlar için hala hukuki denetim ve düzenlemeler gerekebilir.

Akıllı sözleşmeler, geleneksel anlaşmaların dijital çağa adapte edilmiş hali olarak değerlendirilebilir. Bu teknoloji, iş dünyasını daha verimli, hızlı ve güvenli hale getirebilir. Ancak, akıllı sözleşmelerin potansiyelini tam olarak kullanmak için teknik, hukuki ve güvenlik yönlerini iyi anlamak ve yönetmek önemlidir. Gelecekte, akıllı sözleşmelerin daha yaygın hale gelmesi ve iş süreçlerinin temelini oluşturması beklenmektedir.

DeFi: Merkezi Olmayan Finansın Yükselişi

Finansal dünyanın dönüşümü, blockchain teknolojisinin yaratıcı uygulamalarıyla hız kazanıyor. Merkezi olmayan finans (DeFi), geleneksel finansal aracıları devre dışı bırakan, yenilikçi ve özerk bir ekosistem yaratarak finansal hizmetlere erişimi yeniden tanımlıyor.

DeFi Nedir?

Merkezi Olmayan Finans (DeFi), blockchain teknolojisi üzerine inşa edilen ve geleneksel finansal aracıları devre dışı bırakan bir ekosistemdir. DeFi platformları, akıllı sözleşmelerin yardımıyla finansal ürün ve hizmetleri dijital olarak sunar. Bu platformlar, merkezi kuruluşların yerine algoritmalar ve kodlarla yönetilen özerk sistemlere dayanır. Bu sayede, işlemler daha hızlı, şeffaf ve düşük maliyetli hale gelebilir.

Nasıl Çalışır?

DeFi platformları, blockchain ağları üzerinde çalışır ve akıllı sözleşmeleri temel alır. Ethereum, en popüler DeFi platformlarından biridir. DeFi protokollerinin işleyişi, bir dizi akıllı sözleşmenin etkileşimi ile gerçekleşir. Bu akıllı sözleşmeler, önceden belirlenmiş kurallara göre işlem yapar. Örneğin, bir kullanıcı kredi almak istediğinde, belirli bir teminatı akıllı sözleşmeye kilitleyebilir ve buna karşılık bir kredi alabilir. Bu tür işlemler merkezi bir aracı olmadan gerçekleşir.

DeFi ekosistemi, kredi verme, ödünç alma, ticaret, tahvil çıkarma, likidite sağlama ve daha birçok finansal işlemi içerir. Tüm bu işlemler, blockchain teknolojisinin sağladığı şeffaflık ve otomatizasyon avantajlarıyla desteklenir.

Avantajları ve Zorlukları

DeFi'nin getirdiği avantajlar ve zorluklar şunlar olabilir:

Avantajlar:

  1. Erişim ve Kapsayıcılık: DeFi, dünya genelindeki bireylerin finansal hizmetlere erişimini artırabilir. Banka hesabı olmayan veya geleneksel finansal sistemlere erişimi kısıtlı olan kişiler için önemli bir fırsat sunar.

  2. Şeffaflık: İşlemler, blockchain üzerinde herkes tarafından görülebilir ve denetlenebilir. Bu, şeffaflığı artırır ve dolandırıcılığı azaltabilir.

  3. Hız ve Düşük Maliyetler: Geleneksel finans işlemlerine kıyasla DeFi işlemleri genellikle daha hızlı gerçekleşir ve daha düşük işlem ücretleri gerektirir.

Zorluklar:

  1. Güvenlik: DeFi platformlarında sık sık yazılım hataları ve saldırılar görülebilir. Bu, kullanıcıların fonlarının risk altında olabileceği anlamına gelir.

  2. Düzenleme ve Yasal Konular: DeFi, düzenleyiciler için yeni bir alan olduğundan, yasal ve düzenleyici zorluklar ortaya çıkabilir. Mevcut finansal yasalara nasıl uymaları gerektiği belirsiz olabilir.

  3. Volatilite: DeFi platformlarında işlem gören varlıklar sıklıkla kripto para birimleridir. Bu nedenle, volatilite yüksek olabilir ve yatırımcılar için riskli olabilir.

Gelecek ve DeFi'nin Etkileri

Merkezi Olmayan Finansın geleceği oldukça heyecan verici görünüyor. DeFi, finansal hizmetlere erişimi artırabilir, geleneksel finansal sistemlere alternatifler sunabilir ve finansal katılımı artırabilir. Ancak, DeFi'nin yaygınlaşması ve sürdürülebilirliği için güvenlik, düzenleme ve yasal uyumluluk gibi önemli konuların ele alınması gerekecektir. DeFi ekosistemi, finansal dünyanın dönüşümünün sadece bir başlangıcı olabilir.

NFT'ler: Dijital Varlıkların Yeniden Tanımlanması

Dijital çağın gelişiyle birlikte, sanat, eğlence ve diğer yaratıcı alanlarda dijital varlıkların değeri artmış durumda. Ancak dijital varlıkların sahipliği ve benzersizliği konusundaki zorluklar da ortaya çıkmıştır. İşte bu noktada, Non-Fungible Token'lar (NFT'ler) devreye giriyor. NFT'ler, dijital varlıkları benzersiz hale getiren ve sahiplik haklarını blockchain teknolojisiyle yöneten yenilikçi bir konsepttir.

NFT'lerin Temeli

Non-Fungible Token (NFT), özgün dijital varlıkların sahipliğini temsil eden bir tür kripto varlıktır. Kripto paralar gibi NFT'ler de blockchain teknolojisiyle desteklenir, ancak kripto paraların aksine her biri benzersizdir ve değiştirilemez özellik taşır. Bu özelliği sayesinde NFT'ler, sanat eserleri, dijital koleksiyonlar, müzik, oyun içerikleri, sanal mülkler ve daha birçok dijital varlığın sahipliğinin belgelenmesini sağlar.

Nasıl Çalışırlar?

NFT'ler, blockchain tabanlı platformlarda oluşturulur ve işlem görür. Ethereum, NFT'lerin en yaygın olarak kullanıldığı platformlardan biridir. Bir NFT, dijital varlığın benzersiz kimliğini ve sahipliğini temsil eden bir kod parçası içerir. Bu kod, bir akıllı sözleşme tarafından yönetilir ve belirli koşullar sağlandığında işlem yapar. Örneğin, bir sanat eserinin sahipliği transfer edilirken veya satış gerçekleştiğinde, bu akıllı sözleşme tetiklenir ve işlem gerçekleşir.

NFT'ler, sahiplik hakları konusunda büyük esneklik sunar. Bir NFT'nin sahibi, dijital varlığın telif hakkı ve kullanım haklarını elinde bulundurabilir. Bu da sanatçılar, yaratıcılar ve koleksiyonerler için yeni gelir akışları ve ticaret fırsatları yaratır.

Kültürel ve Ekonomik Etkiler

NFT'ler, kültürel ve ekonomik anlamda bir dizi etki yaratmıştır:

Sanat ve Kültür: NFT'ler, sanatçılar için dijital eserlerini değerli ve benzersiz kılar. Sanat eserleri NFT olarak satılabilir ve sahiplik hakları sağlayabilir. Bu, sanatın dijital çağda yeni bir ifade şekli bulmasına olanak tanır.

Oyun Dünyası: Oyun içerikleri, sanal mülkler ve karakterler NFT olarak temsil edilebilir. Oyuncular, oyun içi varlıkları satın alabilir, satabilir ve takas edebilir. Bu da oyun içi ekonomileri ve oyuncu deneyimini değiştirir.

Müzik ve Eğlence: Sanatçılar, müzik parçalarını NFT olarak satışa sunabilir ve dinleyicilere sahiplik hakları sağlayabilir. Bu, müzik endüstrisinde gelir modelinin değişmesine yol açar.

Mülkiyet Kavramının Yeniden Tanımlanması: NFT'ler, dijital varlıkların sahipliğini daha şeffaf, güvenilir ve benzersiz hale getirir. Bu, mülkiyet kavramının gelecekteki tanımını etkileyebilir.

NFT'ler, dijital varlıkların sahipliğini ve benzersizliğini temsil eden bir dönüşüm getiriyor. Sanat, kültür, oyun ve daha birçok alanda yeni fırsatlar yaratıyor. Ancak NFT'lerin de bazı zorlukları ve sürdürülebilirlik soruları vardır. Gelecekte, NFT'lerin ekonomik ve kültürel etkilerinin daha fazla hissedilmesi bekleniyor ve dijital varlıkların geleceğini şekillendirebilir.

Coin ve Token: Kripto Dünyasının Temel Farkları

Kripto para dünyasında, terimler ve kavramlar genellikle karmaşık ve karıştırıcı olabilir. "Coin" ve "token" terimleri, sıklıkla kullanılan ancak birbirleriyle karıştırılan iki önemli terimdir. Her ikisi de kripto para birimleri olarak kabul edilse de, aralarındaki farklar oldukça belirgindir.

Coin Nedir?

Coin terimi, ilk ve en yaygın kullanılan kripto para birimi türünü tanımlar. Bir coin, kendi bağımsız blockchain ağına sahip olan bir kripto para birimidir. Bitcoin (BTC) en bilinen coin örneğidir. Bitcoin, kendi blockchain ağı üzerinde çalışan bir coin olarak ortaya çıkmıştır. Coin'ler, genellikle bağımsız ve merkezi olmayan bir şekilde işlem yaparlar ve genellikle temelde bir ödeme aracı veya değer saklama aracı olarak kullanılırlar.

Coin'ler, madencilik veya staking gibi yöntemlerle üretilebilir veya elde edilebilir. Coin'lerin genellikle kendi kripto cüzdanları ve bağımsız ağları vardır.

Token Nedir?

Token terimi, belirli bir blockchain platformunun üzerinde çalışan ve çoğunlukla akıllı sözleşmelerle ilişkilendirilen dijital varlıkları tanımlar. Token'lar, genellikle Ethereum gibi mevcut blockchain ağlarında oluşturulurlar ve bu ağlar üzerinde çalışırlar. Token'lar, akıllı sözleşmeler aracılığıyla işlem yapabilirler ve genellikle belirli projelerin veya platformların ekosistemlerinin bir parçası olarak kullanılırlar.

Token'lar farklı amaçlar için kullanılabilir. İşlem ücreti ödemek, oy kullanmak, özel içeriklere erişim sağlamak veya bir projenin finansmanını sağlamak gibi çeşitli amaçlar için token'lar oluşturulabilir.

Coin ve Token Arasındaki Farklar

Coin ve token arasındaki ana farklar şunlardır:

  1. Bağımsızlık ve Blockchain Ağı: Coin'ler, kendi bağımsız blockchain ağlarına sahiptirken, token'lar genellikle mevcut blockchain ağları üzerinde çalışırlar.

  2. Kullanım Alanı: Coin'ler genellikle ödeme veya değer saklama aracı olarak kullanılırken, token'lar farklı projelerin veya platformların ekosistemlerinde çeşitli amaçlar için kullanılırlar.

  3. Oluşturma Yöntemi: Coin'ler genellikle madencilik veya staking gibi yöntemlerle üretilirken, token'lar mevcut blockchain ağları üzerinde akıllı sözleşmeler aracılığıyla oluşturulurlar.

Coin ve token terimleri, kripto para dünyasında farklı varlık türlerini tanımlayan önemli kavramlardır. Coin'ler kendi bağımsız blockchain ağları üzerinde çalışırken, token'lar mevcut blockchain ağları üzerinde akıllı sözleşmeler aracılığıyla oluşturulurlar. Her iki terim de kripto para ekosisteminin büyümesi ve çeşitliliği için önemlidir.

Ethereum: Akıllı Sözleşmelerin ve DeFi'nin Temeli

Kripto para dünyasının öncü ve en etkili projelerinden biri olan Ethereum, sadece bir kripto para birimi değil, aynı zamanda akıllı sözleşmelerin ve merkezi olmayan finans (DeFi) ekosisteminin temelini oluşturan bir platformdur. Ethereum'un yaratıcısı Vitalik Buterin tarafından 2015 yılında geliştirilen bu platform, dijital dünyada büyük bir devrim yaratmıştır.

Ethereum Nedir?

Ethereum, blockchain teknolojisinin ötesine geçen bir platformdur. Bitcoin gibi geleneksel kripto paralar sadece dijital değer taşırken, Ethereum birçok farklı uygulamanın geliştirilmesine olanak tanır. Ethereum, akıllı sözleşmelerin oluşturulmasını ve yürütülmesini mümkün kılan bir platformdur. Akıllı sözleşmeler, belirli koşulların yerine gelmesi durumunda otomatik olarak tetiklenen ve işlemleri gerçekleştiren kod parçalarıdır.

Nasıl Çalışır?

Ethereum, özgün blockchain teknolojisinin bir varyasyonunu kullanır. Bununla birlikte, Ethereum'un özelliği, akıllı sözleşmeleri destekleyebilmesidir. Ethereum ağında, akıllı sözleşmeler ve diğer uygulamalar için kullanılan "smart contract" adlı bir programlama dili bulunur. Geliştiriciler, bu dil aracılığıyla karmaşık işlemleri ve akıllı sözleşmeleri oluşturabilirler.

Ethereum'un yerel kripto para birimi "Ether"dir (ETH). Ether, Ethereum ağının yakıtı gibidir ve işlemlerin gerçekleştirilmesi ve akıllı sözleşmelerin çalıştırılması için kullanılır.

Kültürel ve Teknolojik Etkileri

Ethereum, hem kültürel hem de teknolojik olarak büyük bir etki yaratmıştır:

Akıllı Sözleşmeler: Ethereum, akıllı sözleşmelerin geliştirilmesini ve kullanılmasını sağlamıştır. Bu, geleneksel hukuki süreçlerin otomasyonunu ve daha verimli işlemleri mümkün kılar.

DeFi: Ethereum, merkezi olmayan finans (DeFi) ekosisteminin temelini atmıştır. DeFi, geleneksel finansal aracıları devre dışı bırakarak, kredi verme, ödünç alma, ticaret ve daha birçok işlemi sağlayan platformlar olarak tanımlanır.

Token'lar: Ethereum, projelerin kendi token'larını oluşturmasını ve yönetmesini sağlar. Bu, tokenizasyonun ve özel kullanım amaçlarına sahip dijital varlıkların yaratılmasını mümkün kılar.

Gelecek ve İnovasyon: Ethereum, sürekli olarak geliştirilen ve yeni özellikler eklenen bir platformdur. Bu, gelecekte daha fazla inovasyonun ve kullanım senaryosunun mümkün olacağı anlamına gelir.

Ethereum, kripto para dünyasının temel taşlarından biri haline gelmiştir. Akıllı sözleşmelerin ve merkezi olmayan finansın gelişiminde önemli bir rol oynamıştır. Ancak skalabilite ve enerji verimliliği gibi bazı teknik zorluklarla karşı karşıya kalmıştır. Gelecekte, Ethereum'un daha da büyümesi ve gelişmesi bekleniyor, ve bu da teknoloji ve finans dünyalarını derinden etkileyebilir.

Ethereum Token Standartları: ERC-20, ERC-721 ve ERC-1155

Ethereum, akıllı sözleşmeleri destekleyen ve token'lar gibi dijital varlıkların oluşturulmasına izin veren bir platformdur. Ethereum ekosistemi içinde, token'lar belirli standartlara göre oluşturulur ve yönetilir. Bu standartlar, token'ların nasıl işlediğini ve nasıl etkileşime girdiğini tanımlar. En yaygın olarak kullanılan Ethereum token standartları arasında ERC-20, ERC-721 ve ERC-1155 bulunmaktadır.

ERC-20 Nedir?

ERC-20, Ethereum ekosisteminde en yaygın olarak kullanılan token standartlarından biridir. Bu standart, fungible (değiştirilebilir) token'ları tanımlar. Yani, her bir birimi bir diğerine eşittir ve herhangi biri diğerinin yerine kullanılabilir. ERC-20 token'ları, işlem kolaylığı ve borsalarda listelenme için uygunluk sağlar.

ERC-20 token'ları, belirli işlevleri yerine getirebilir. Örneğin, kripto para birimi olarak kullanılabilir, projenin ekosistemine özel yetkiler sağlayabilir veya belirli hizmetlere erişim sağlayabilir.

ERC-721 Nedir?

ERC-721, non-fungible (değiştirilemez) token'ları tanımlayan bir standarttır. Her bir ERC-721 token'ı benzersiz ve değiştirilemezdir. Bu standart, sanat eserleri, dijital koleksiyonlar, oyun içi varlıklar gibi benzersiz varlıkların temsil edilmesi için kullanılır.

ERC-721 token'ları, her birinin özel bir kimliği ve sahipliği olduğu için benzersiz varlıkları temsil etmek için idealdir. Kripto sanat, oyun içi karakterler ve dijital koleksiyonlar gibi alanlarda sıklıkla kullanılır.

ERC-1155 Nedir?

ERC-1155, hem fungible hem de non-fungible token'ları destekleyen bir standarttır. Bu standart, geliştiricilere daha esnek token oluşturma ve yönetme yeteneği sunar. ERC-1155 token'ları, tek bir akıllı sözleşme içinde birden fazla token türünü barındırabilir.

ERC-1155 token'ları, özellikle oyunlar ve dijital varlık yönetimi için kullanışlıdır. Birden fazla varlık türünü aynı akıllı sözleşme içinde yönetmek, işlem ücretlerini azaltabilir ve daha verimli bir deneyim sağlayabilir.

Ethereum'un token standartları, dijital varlıkların oluşturulması ve yönetilmesi için temel bir yapı sağlar. ERC-20, fungible token'ları temsil ederken, ERC-721 ve ERC-1155 non-fungible token'ları temsil eder. Her bir standart, farklı kullanım senaryolarına ve projelere uygunluk sağlar. Kripto sanat, oyunlar, finansal hizmetler ve daha birçok alanda bu token standartları etkili bir şekilde kullanılır.

Ganache Nedir?

Ganache, Ethereum blok zinciri üzerinde geliştirme, test ve hata ayıklama yapmak için kullanılan bir kişisel blok zinciri simülatörüdür. Ethereum tabanlı projelerin geliştirilmesi aşamasında kullanıcıların gerçek Ethereum ağına işlem göndermeden önce işlevselliklerini test etmelerine olanak tanır. Ganache, Ethereum ağına benzeyen bir ortam oluşturarak geliştiricilere gerçek zamanlı olarak işlem yapma, akıllı sözleşmeleri çalıştırma ve test ağı koşullarında uygulamalarını deneme imkanı sunar.

Ganache aynı zamanda Ethereum sanal makinesi (EVM) üzerinde çalışır. Bu, geliştiricilerin Ethereum ağına özgü işlemleri ve akıllı sözleşmeleri test etmelerine ve hata ayıklamalarına yardımcı olurken, gerçek Ether kullanmadan bu işlemleri gerçekleştirmelerini sağlar. Ganache, kullanıcı dostu bir arayüze sahip olduğu için geliştiricilerin daha rahat ve hızlı bir şekilde projelerini geliştirmelerine yardımcı olur.

Ganache'nin bazı temel özellikleri şunlar olabilir:

  1. Kişisel Blok Zinciri: Ganache, kullanıcının kontrol ettiği ve özelleştirebileceği bir kişisel Ethereum blok zinciri simülasyonu sağlar.

  2. Demo Modu: Hızlı bir şekilde demo amaçlı blok zinciri oluşturmanıza olanak tanır.

  3. Akıllı Sözleşme Hata Ayıklama: Ganache, akıllı sözleşmeleri hata ayıklama ve işlevselliğini test etme amacıyla kullanabilirsiniz.

  4. Hızlı İşlem: Gerçek Ethereum ağına kıyasla işlemlerin hızlı bir şekilde gerçekleştiği bir ortam sunar.

  5. Sanal Ether: Geliştirme amaçlı sanal Ether sağlar, bu nedenle gerçek Ether harcamadan işlemlerinizi ve akıllı sözleşmelerinizi test edebilirsiniz.

Ganache, Ethereum geliştirme sürecini daha verimli hale getiren ve projelerin daha güvenli bir şekilde test edilmesini sağlayan önemli bir araçtır. Başta Ethereum akıllı sözleşmeleri geliştiricileri olmak üzere, blok zinciri projeleri geliştiren birçok kişi ve ekip tarafından kullanılmaktadır.

Truffle: Ethereum Akıllı Sözleşme Geliştirmenin Anahtarı

Blockchain teknolojisi, merkezi olmayan uygulamaların ve akıllı sözleşmelerin geliştirilmesini mümkün kılar. Ethereum gibi platformlar, akıllı sözleşmeleri desteklemek için bir dizi araç ve çerçeve sunar. Bu araçlardan biri de Truffle'dır. Truffle, Ethereum akıllı sözleşme geliştirmenin anahtarı olarak kabul edilir.

Truffle Nedir?

Truffle, Ethereum akıllı sözleşme geliştirmenin en popüler çerçevelerinden biridir. Ethereum projelerini daha hızlı, kolay ve verimli bir şekilde geliştirmek için tasarlanmıştır. Truffle, akıllı sözleşmelerin oluşturulmasından dağıtılmasına, test edilmesinden hata ayıklamasına kadar bir dizi süreci kolaylaştıran bir araçtır.

Nasıl Çalışır?

Truffle, Ethereum akıllı sözleşme geliştirmenin her aşamasını kapsayan bir çerçevedir. Temel olarak şu işlevleri yerine getirir:

  1. Proje Oluşturma: Truffle, yeni bir Ethereum projesi oluşturmanıza olanak tanır. Proje alt yapısını hazırlar ve temel dosyaları oluşturur.

  2. Akıllı Sözleşme Geliştirme: Truffle ile Solidity dili kullanarak akıllı sözleşmeleri oluşturabilirsiniz. Bu sözleşmelerin temelini oluşturmak için gereken araçları sağlar.

  3. Test Ağı: Truffle, yerel bir test ağı sağlar. Bu ağda akıllı sözleşmelerinizi test edebilir ve hata ayıklama yapabilirsiniz.

  4. Derleme ve Dağıtma: Truffle, akıllı sözleşmelerinizi derler ve Ethereum ağına dağıtmanızı sağlar.

  5. Hata Ayıklama: Truffle, hata ayıklama araçları ve raporlama sağlar, böylece akıllı sözleşmeleri güvenli bir şekilde hata ayıklamanız mümkün olur.

Avantajları

Truffle'ın sağladığı avantajlar şunlar olabilir:

  1. Hızlı Geliştirme: Truffle, geliştiricilere Ethereum projelerini daha hızlı ve verimli bir şekilde oluşturma olanağı sunar.

  2. Test ve Hata Ayıklama: Yerel test ağı ve hata ayıklama araçları, akıllı sözleşmeleri güvenli bir şekilde test etme ve hataları ayıklama imkanı sağlar.

  3. Güçlü Araçlar: Truffle, zengin hata ayıklama ve analiz araçları ile donatılmıştır.

  4. Akıllı Sözleşme Yönetimi: Truffle ile akıllı sözleşmeleri kolayca yönetebilir, güncelleyebilir ve izleyebilirsiniz.

Kullanım Alanları

Truffle, Ethereum geliştirme sürecinde geniş bir kullanım yelpazesi sunar:

  1. Akıllı Sözleşme Geliştirme: Truffle, akıllı sözleşmelerin oluşturulması ve geliştirilmesi için kullanılır.

  2. Test ve Doğrulama: Akıllı sözleşmeleri yerel test ağı üzerinde test etme ve doğrulama imkanı sunar.

  3. Hata Ayıklama: Truffle, akıllı sözleşme hata ayıklamasını kolaylaştırır.

  4. Dağıtma ve Yönetim: Truffle ile akıllı sözleşmeleri gerçek Ethereum ağına dağıtabilir ve yönetebilirsiniz.

Truffle, Ethereum akıllı sözleşme geliştirmenin temel araçlarından biridir. Geliştiricilere daha hızlı ve güvenilir projeler oluşturma olanağı sağlar. Akıllı sözleşmelerin her aşamasını kapsayan bu çerçeve, Ethereum ekosistemine katkıda bulunan geliştiriciler için vazgeçilmez bir kaynaktır.

 

 

Solidity: Akıllı Sözleşme Geliştirmenin Temel Aracı

Blockchain teknolojisi, akıllı sözleşmelerin geliştirilmesini mümkün kılarak, geleneksel işlemleri ve işlem süreçlerini dönüştürür. Akıllı sözleşmeler, belirli koşullar yerine geldiğinde otomatik olarak çalışan ve işlemleri gerçekleştiren dijital kontratlardır. Ethereum gibi blockchain platformları, akıllı sözleşmeleri desteklemek için Solidity adlı bir programlama dili geliştirdi.

Solidity Nedir?

Solidity, Ethereum platformunda akıllı sözleşme geliştirmek için kullanılan bir programlama dilidir. Solidity, C++, Python ve JavaScript gibi dillerden etkilenerek tasarlanmış, öğrenmesi ve kullanması nispeten kolay bir dil olarak dikkat çeker. Akıllı sözleşmeleri kodlamak ve yürütmek için kullanılırken, sözleşmelerin taraflar arasında otomatik olarak gerçekleşen işlemlerini sağlar.

Nasıl Çalışır?

Solidity, akıllı sözleşmeleri yazarken kullanılan bir dildir. Bu dili kullanarak, belirli koşullar sağlandığında işlemlerin gerçekleşeceği akıllı sözleşmeler oluşturabilirsiniz. Solidity, Ethereum Virtual Machine (EVM) üzerinde çalışan akıllı sözleşmeleri derlemek ve yürütmek için kullanılır.

Solidity dilinde yazılan akıllı sözleşmeler, merkezi olmayan uygulamaların temelini oluşturur. Örneğin, bir ödeme akıllı sözleşmesi, belirli bir tarih ve miktar yerine geldiğinde otomatik olarak bir ödeme işlemi gerçekleştirebilir.

Özellikleri

Solidity'nin temel özellikleri şunlar olabilir:

  1. Sözleşme Odaklı: Solidity, akıllı sözleşme geliştirme üzerine odaklanmış bir dildir.

  2. Ethereum'a Entegre: Ethereum ağında çalışan akıllı sözleşmeleri geliştirmek için tasarlanmıştır.

  3. Nesne Tabanlı: Solidity, nesne tabanlı programlamaya dayanır ve geliştiricilere daha organize bir yaklaşım sunar.

  4. Sözleşme Güvenliği: Solidity, güvenlik açıklarını minimize etmek için tasarlanmıştır ve yazım hatalarını en aza indirir.

Kullanım Alanları

Solidity, geniş bir kullanım yelpazesine sahiptir:

  1. Akıllı Sözleşmeler: Solidity, merkezi olmayan uygulamaların temelini oluşturan akıllı sözleşmeleri geliştirmek için kullanılır.

  2. Token Oluşturma: Solidity, ERC-20, ERC-721 ve ERC-1155 gibi Ethereum token standartlarının oluşturulmasında kullanılır.

  3. DeFi Uygulamaları: Solidity, DeFi (merkezi olmayan finans) projelerinin geliştirilmesinde sıkça kullanılır.

  4. Oyun Geliştirme: Solidity, oyun içi varlıkları temsil etmek ve yönetmek için kullanılır.

Solidity, Ethereum platformunda akıllı sözleşme geliştirmenin temel aracıdır. Merkezi olmayan uygulamaların temelini oluştururken, güvenlik ve işlevsellik sağlamak için tasarlanmış bir programlama dilidir. Geliştiricilere, blok zinciri tabanlı projeler oluşturmak için kapsamlı bir araç seti sunar.

Ethereum Geliştirme Ortamı Kurulumu

Örnek olarak SpaceWars adlı bir oyunun akıllı sözleşmelerini yazıyoruz. Bu projede Token, Marketplace, Pack, NFT, Multiwrap gibi ihtiyacımız olan çoğu akıllı sözleşme yer alacak. Projeyi aşağıdaki linkten inceleyebilirsiniz.

GitHub Proje Linki: https://github.com/ayzdru/AyazDuru.Blockchain.Samples.MarketplaceNFTAndToken

1) İlk olarak Visual Studio Code indirip, kuruyoruz.

2) Visual Studio Code'a Truffle for VSCode uzantısını kuruyoruz. Node.js, Git, NPM, Truffle Suite, Ganache CLI araçlarını yüklüyoruz.

3) Visual Studio Code ile projeyi oluşturacağımız klasörü seçip, CTRL+Shift+P ile Komut paletini açıp, Truffle: New Solidity Project komutunu seçiyoruz.

4) Akıllı Sözleşmeler için gerekli openzeppelin, thirdweb, ethers, truffle-contract-size paketlerini yüklüyoruz.

npm i @thirdweb-dev/contracts
npm i @openzeppelin/contracts-upgradeable@4.7.3
npm i ethers
npm i truffle-contract-size
npm install --save-dev @openzeppelin/truffle-upgrades

5) contracts klasörüne yazacağımız akıllı sözleşmeleri ekliyoruz. Ben sadece token dosyasını ekledim. Siz diğer contractları github projesinden alabilirsiniz.

SpaceWarsToken.sol

// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.11;

//Interface
import { ITokenERC20 } from "@thirdweb-dev/contracts/interfaces/token/ITokenERC20.sol";

import "@thirdweb-dev/contracts/interfaces/IThirdwebContract.sol";
import "@thirdweb-dev/contracts/extension/interface/IPlatformFee.sol";
import "@thirdweb-dev/contracts/extension/interface/IPrimarySale.sol";

// Token
import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol";

// Security
import "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";

// Signature utils
import "@openzeppelin/contracts-upgradeable/utils/cryptography/ECDSAUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/cryptography/draft-EIP712Upgradeable.sol";

// Meta transactions
import "@thirdweb-dev/contracts/openzeppelin-presets/metatx/ERC2771ContextUpgradeable.sol";

// Utils
import "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol";
import "@thirdweb-dev/contracts/lib/CurrencyTransferLib.sol";
import "@thirdweb-dev/contracts/lib/FeeType.sol";

contract SpaceWarsToken is
    Initializable,
    IThirdwebContract,
    IPrimarySale,
    IPlatformFee,
    ReentrancyGuardUpgradeable,
    ERC2771ContextUpgradeable,
    MulticallUpgradeable,
    ERC20BurnableUpgradeable,
    ERC20VotesUpgradeable,
    ITokenERC20,
    AccessControlEnumerableUpgradeable
{
    using ECDSAUpgradeable for bytes32;

    bytes32 private constant MODULE_TYPE = bytes32("SpaceWarsToken");
    uint256 private constant VERSION = 1;

    bytes32 private constant TYPEHASH =
        keccak256(
            "MintRequest(address to,address primarySaleRecipient,uint256 quantity,uint256 price,address currency,uint128 validityStartTimestamp,uint128 validityEndTimestamp,bytes32 uid)"
        );

    bytes32 internal constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 internal constant TRANSFER_ROLE = keccak256("TRANSFER_ROLE");

    /// @dev Returns the URI for the storefront-level metadata of the contract.
    string public contractURI;

    /// @dev Max bps in the thirdweb system
    uint128 internal constant MAX_BPS = 10_000;

    /// @dev The % of primary sales collected by the contract as fees.
    uint128 private platformFeeBps;

    /// @dev The adress that receives all primary sales value.
    address internal platformFeeRecipient;

    /// @dev The adress that receives all primary sales value.
    address public primarySaleRecipient;

    /// @dev Mapping from mint request UID => whether the mint request is processed.
    mapping(bytes32 => bool) private minted;

    /// @custom:oz-upgrades-unsafe-allow constructor
    constructor() {
        _disableInitializers();
    }

    /// @dev Initiliazes the contract, like a constructor.
    function initialize(
        address _defaultAdmin,
        string memory _name,
        string memory _symbol,
        string memory _contractURI,
        address[] memory _trustedForwarders,
        address _primarySaleRecipient,
        address _platformFeeRecipient,
        uint256 _platformFeeBps
    ) external initializer {
        __ReentrancyGuard_init();
        __ERC2771Context_init_unchained(_trustedForwarders);
        __ERC20Permit_init(_name);
        __ERC20_init_unchained(_name, _symbol);

        contractURI = _contractURI;
        primarySaleRecipient = _primarySaleRecipient;
        platformFeeRecipient = _platformFeeRecipient;

        require(_platformFeeBps <= MAX_BPS, "exceeds MAX_BPS");
        platformFeeBps = uint128(_platformFeeBps);

        _setupRole(DEFAULT_ADMIN_ROLE, _defaultAdmin);
        _setupRole(TRANSFER_ROLE, _defaultAdmin);
        _setupRole(MINTER_ROLE, _defaultAdmin);
        _setupRole(TRANSFER_ROLE, address(0));
    }

    /// @dev Returns the module type of the contract.
    function contractType() external pure virtual returns (bytes32) {
        return MODULE_TYPE;
    }

    /// @dev Returns the version of the contract.
    function contractVersion() external pure virtual returns (uint8) {
        return uint8(VERSION);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override(ERC20Upgradeable, ERC20VotesUpgradeable) {
        super._afterTokenTransfer(from, to, amount);
    }

    /// @dev Runs on every transfer.
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        super._beforeTokenTransfer(from, to, amount);

        if (!hasRole(TRANSFER_ROLE, address(0)) && from != address(0) && to != address(0)) {
            require(hasRole(TRANSFER_ROLE, from) || hasRole(TRANSFER_ROLE, to), "transfers restricted.");
        }
    }

    function _mint(address account, uint256 amount) internal virtual override(ERC20Upgradeable, ERC20VotesUpgradeable) {
        super._mint(account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual override(ERC20Upgradeable, ERC20VotesUpgradeable) {
        super._burn(account, amount);
    }

    /**
     * @dev Creates `amount` new tokens for `to`.
     *
     * See {ERC20-_mint}.
     *
     * Requirements:
     *
     * - the caller must have the `MINTER_ROLE`.
     */
    function mintTo(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "not minter.");
        _mintTo(to, amount);
    }

    /// @dev Verifies that a mint request is signed by an account holding MINTER_ROLE (at the time of the function call).
    function verify(MintRequest calldata _req, bytes calldata _signature) public view returns (bool, address) {
        address signer = recoverAddress(_req, _signature);
        return (!minted[_req.uid] && hasRole(MINTER_ROLE, signer), signer);
    }

    /// @dev Mints tokens according to the provided mint request.
    function mintWithSignature(MintRequest calldata _req, bytes calldata _signature) external payable nonReentrant {
        address signer = verifyRequest(_req, _signature);
        address receiver = _req.to;

        collectPrice(_req);

        _mintTo(receiver, _req.quantity);

        emit TokensMintedWithSignature(signer, receiver, _req);
    }

    /// @dev Lets a module admin set the default recipient of all primary sales.
    function setPrimarySaleRecipient(address _saleRecipient) external onlyRole(DEFAULT_ADMIN_ROLE) {
        primarySaleRecipient = _saleRecipient;
        emit PrimarySaleRecipientUpdated(_saleRecipient);
    }

    /// @dev Lets a module admin update the fees on primary sales.
    function setPlatformFeeInfo(address _platformFeeRecipient, uint256 _platformFeeBps)
        external
        onlyRole(DEFAULT_ADMIN_ROLE)
    {
        require(_platformFeeBps <= MAX_BPS, "exceeds MAX_BPS");

        platformFeeBps = uint64(_platformFeeBps);
        platformFeeRecipient = _platformFeeRecipient;

        emit PlatformFeeInfoUpdated(_platformFeeRecipient, _platformFeeBps);
    }

    /// @dev Returns the platform fee bps and recipient.
    function getPlatformFeeInfo() external view returns (address, uint16) {
        return (platformFeeRecipient, uint16(platformFeeBps));
    }

    /// @dev Collects and distributes the primary sale value of tokens being claimed.
    function collectPrice(MintRequest calldata _req) internal {
        if (_req.price == 0) {
            return;
        }

        uint256 platformFees = (_req.price * platformFeeBps) / MAX_BPS;

        if (_req.currency == CurrencyTransferLib.NATIVE_TOKEN) {
            require(msg.value == _req.price, "must send total price.");
        } else {
            require(msg.value == 0, "msg value not zero");
        }

        address saleRecipient = _req.primarySaleRecipient == address(0)
            ? primarySaleRecipient
            : _req.primarySaleRecipient;

        CurrencyTransferLib.transferCurrency(_req.currency, _msgSender(), platformFeeRecipient, platformFees);
        CurrencyTransferLib.transferCurrency(_req.currency, _msgSender(), saleRecipient, _req.price - platformFees);
    }

    /// @dev Mints `amount` of tokens to `to`
    function _mintTo(address _to, uint256 _amount) internal {
        _mint(_to, _amount);
        emit TokensMinted(_to, _amount);
    }

    /// @dev Verifies that a mint request is valid.
    function verifyRequest(MintRequest calldata _req, bytes calldata _signature) internal returns (address) {
        (bool success, address signer) = verify(_req, _signature);
        require(success, "invalid signature");

        require(
            _req.validityStartTimestamp <= block.timestamp && _req.validityEndTimestamp >= block.timestamp,
            "request expired"
        );
        require(_req.to != address(0), "recipient undefined");
        require(_req.quantity > 0, "zero quantity");

        minted[_req.uid] = true;

        return signer;
    }

    /// @dev Returns the address of the signer of the mint request.
    function recoverAddress(MintRequest calldata _req, bytes calldata _signature) internal view returns (address) {
        return _hashTypedDataV4(keccak256(_encodeRequest(_req))).recover(_signature);
    }

    /// @dev Resolves 'stack too deep' error in `recoverAddress`.
    function _encodeRequest(MintRequest calldata _req) internal pure returns (bytes memory) {
        return
            abi.encode(
                TYPEHASH,
                _req.to,
                _req.primarySaleRecipient,
                _req.quantity,
                _req.price,
                _req.currency,
                _req.validityStartTimestamp,
                _req.validityEndTimestamp,
                _req.uid
            );
    }

    /// @dev Sets contract URI for the storefront-level metadata of the contract.
    function setContractURI(string calldata _uri) external onlyRole(DEFAULT_ADMIN_ROLE) {
        contractURI = _uri;
    }

    function _msgSender()
        internal
        view
        virtual
        override(ContextUpgradeable, ERC2771ContextUpgradeable)
        returns (address sender)
    {
        return ERC2771ContextUpgradeable._msgSender();
    }

    function _msgData()
        internal
        view
        virtual
        override(ContextUpgradeable, ERC2771ContextUpgradeable)
        returns (bytes calldata)
    {
        return ERC2771ContextUpgradeable._msgData();
    }
}

6) CTRL+Shift+P ile Komut paletini açıp, Truffle: Create a new network komutunu seçiyoruz. Ganache servisini başlatıyoruz.

7) CTRL+Shift+P ile Komut paletini açıp, Truffle: Deploy Contracts komutunu seçiyoruz. Oluşturduğumuz Ganache ağına smart contractları deploy ediyoruz.

8) Aşağıdaki scripti çalıştırarak Token mintliyoruz.

SpaceWarsToken.js

const SpaceWarsToken = artifacts.require("SpaceWarsToken")
module.exports =  async (callback) => {
  try {
    const spaceWarsToken = await SpaceWarsToken.deployed();
    console.log(`SpaceWarsToken Contract Address: ${spaceWarsToken.address}`);
    var accounts = await web3.eth.getAccounts();
    var to = accounts[0];
    console.log(`SpaceWarsToken Mint Account Address: ${to}`);
    var decimals = await spaceWarsToken.decimals();
    var decimalsZeros = "";
    for (let index = 0; index < decimals; index++) {
      decimalsZeros += "0";      
    }
    await spaceWarsToken.mintTo(to, "100000000" + decimalsZeros);
    console.log("Minted: "+  (await spaceWarsToken.balanceOf(to)).toString());

  } catch(err) {
    console.log('Oops: ', err.message);
  }
  callback();
}

Komut

 npx truffle exec .\scripts\SpaceWarsToken.js

Başlangıç için umarım yararlı bir kaynak olmuştur.

Aşağıdaki linkleri inceleyerek smart contractlar ve truffle komutları hakkında daha fazla şey öğrenebilirsiniz.

https://trufflesuite.com/docs/truffle/quickstart/

https://portal.thirdweb.com/contracts

https://github.com/thirdweb-dev/contracts/tree/main

https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/

https://docs.ethers.org/v5/

ether.js veya web3.js kullanarak akıllı sözleşmelerinizi web projelerinizde de kullanabilirsiniz.

 

Kendinize iyi bakın.

(✿◡‿◡)

Yorumlar kapalı