Avatar
Web3, NFT ve DeFi üzerine

Yolsuzluk Yapamayan Noter

Akıllı kontratları anlatmak için Özgür Demirtaş’ın verdiği noter örneği çok hoşuma gidiyor. Ben eğer senden bir varlık(ev/araba) satın almak istiyorsam ve ücrette anlaştıysak, birlikte notere gideriz; noter vereceğim parayı kontrol eder, senin evin/arabanın belgelerine bakar ve satın alımı onaylar. Onay sonrası resmi olarak parayı sana vermişimdir ve arabayı/evi bana satmışsındır.

Gelin bugün bir akıllı kontrat düşünelim ve blockchain üzerinde çok basit bir noter yaratalım. Solidity programlama dilini bilmeye gerek yok, kaba kod olarak oluşturup birleştireceğiz tüm parçaları.

Malzemeler

Temelden düşünmeye başlarsak bu noter senaryosu için elimizde olması gerekenler: Parayı temsil edecek bir ERC20 token kontratı. (ERC20, fungible token kontratı standardıdır) Ev/Arabayı temsil edecek NFT(ERC721) token kontratı. (ERC721, ünlü non-fungible token kontratı standardıdır)

Not: Acı verse de olabildiğince anlaşılır olması için değişken ve fonksiyon isimlerini Türkçe tutacağım.

paraTokenKontratı from ERC20 {	#tüm alışveriş fonksiyonları bu kontrattan inherit ediyoruz
	
	ismi=TL 		#yaratıcı token ismi
	maksimumArz=1234  #maksimum 1234 tane üretilebilir

}


nftTokenKontratı from ERC721 {	#tüm alışveriş fonksiyonlarını erc721 standardından inherit ediyoruz.

	tokenNo=0		#üreteceğimiz her yeni tokenNo, blockchain üzerinde tekil olarak sonsuza dek korunacak, + 
				#bu kontrattaki bu tokenNo'suna sahip olan başka bir token üretilemeyecek.
	
	nftÜret fonksiyonu(nftÜretmekİsteyenAdres)
	{
		ownerOf(tokenNo) = nftÜretmekİsteyenAdres
		tokenNo++;	#SADECE BİR KERE ÜRETİLİYOR DEMİŞTİK :) 
 	}

}

Ethereum üzerindeki üretilmiş ve market değeri milyar dolar eden bütün tökenların kontratı aslında aşağı yukarı bu kadar.

Noter Kontratı

Yeteri kadar kafa karıştırdıysak şimdi noter senaryosuna geri dönebiliriz. Benim cüzdanımda 1000 adet TL token’i var ve senin elindeki #1 tokenNo’lu NFT’yi(sizin sahip olduğunuz araba/ev’i temsilen) satın almak istiyorum.

noterKontrat {	#sadece tokenKontrat'da bulunan adresteki para birimiyle ve nftKontrat'da bulunan nft adresindeki tökenlarla çalışan, dürüst bir noter.
	
	tokenKontrat = paraTokenKontratı		#Yukarıda yazdığımız TL kontratının adresi
	nftKontrat = nftTokenKontratı			#Yukarıda yazdığımız nft token kontratının adresi

	almaTalebi fonksiyon(alisFiyatı, nftTokenİd) 	#ben bu fonksiyonu (1000, 1) parametreleriyle çağırarak senin arabana 1000TL vererek almak istiyorum
	{
		
		tekliflerinToplandıgiListe(benimAdres, 1000, 1) 
	}

	satışTalebi fonksiyon(nftTokenİd, satisFiyatı, benimAdresim) 	#sen bu fonksiyonu (1,1000) parametreleriyle çağırarak arabanı bu fiyata satışını onaylıyorsun.
	{
		
		checkRecord(nftTokenİd, satisFiyatı, benimAdresim) 		#teklif listesi içinde dönerek benimAdresim'e ait teklifi kontrol edecek bir sorgu
		#true
		nftTokanKontratı.ownerOf(tokenNo) = benimAdresim		#sorgu true döndürdüğü takdirde arabanın aidiyeti bana geçiyor
		
	}

}

Az önce yarattığımız noter kontratını kullanarak, merkezi bir otorite olmadan güvenli bir şekilde alışveriş yapabiliriz. Yazılacak çok akıllı kontrat, yok olması muhtemel birçok meslek, düşünmemiz gereken çok senaryo var.