Eda Kivanc
3 min readOct 19, 2021

--

EĞITIM

Ethereum’u Doğrudan Bir Ethereum Sözleşmesine Göndermeyin

Eda Kivanc2021–10–110 Comment0123

Genel olarak, Ethereum’un akıllı sözleşme kodlama sistemi vasıtasıyla token alıp gönderebilirsiniz. Fakat bu konuda daha büyük sorunlarla karşılaşabilirsiniz. Örneğin, akıllı sözleşmelere doğrudan ETH göndermek mümkün değil. Bunun yerine token gönderip almalısınız. Peki bu sorunun sebebi nedir ve bunu nasıl çözebiliriz?

Tüm Ethereum sözleşmeleri, sözleşme adresine ETH göndermeyi mümkün kılacak şekilde kodlanabilir. Bu yöntem ile Ethereum akıllı sözleşmesinin kullanılması kolaylaştırılır ve farklı uygulamalara gerek kalmaz. nominex borsasindan ethereum ala blirsiniz.

ETH’i Doğrudan Ethereum Sözleşmesine Göndermeyin.

Bununla birlikte, akıllı sözleşmeye bir kod satırı ekleyerek bu özelliği etkinleştirebilmenize rağmen, ETH’yi doğrudan sözleşmeye göndermenin de doğru bir şey olmadığını unutmamalıyız.

Solidity dokümantasyonuna göre, Her ETH’yi Ethereum akıllı sözleşmesine göndermek için 2300’den fazla gaza ihtiyaç vardır. Böylece, bu en pahalı akıllı sözleşme süreçlerinden biri olacak.

ECRECOVER adlı varsayılan sözleşmeler de ETH’yi Ethereum sözleşme adresine göndermenin başka bir sorununa yol açar., ETH transfer işlemlerini gerçekleştirmek için, ECRECOVER’deki fallback fonksiyonunun 2300’den fazla gaza ihtiyacı var. Dolayısıyla, bunu yapmamanızı ve yalnızca akıllı sözleşmeler için tokenleri kullanmanızı tavsiye ederiz.

Ethereum Sözleşmesine Ether Nasıl Gönderilir?

Alıcı, satıcı ve kodları kullanarak Ethereum sözleşmesine ETH gönderme kodunu uygulayabilirsiniz. Wei adlı değişken, akıllı sözleşmede depolanan varlığın varsayılan değeridir, bu yüzden gerekirse birimi dönüştürmeye çalışın.

Sözleşmeye ETH göndermek için alıcının varlık satın almak için ETH kullanması gerekir. Sözleşmeye göre, varlık sahibi varlığı teslim alınana kadar elinde tutmalıdır.

Satın alma onaylanıp varlık teslim alındıktan sonra, belirtilen tutar satıcıya verilir. ETH, sözleşmeden belirli adreslere transfer edilir.

Alıcının varlığı teslim almaması halinde, sözleşme, gönderilen ETH’yi alıcıya geri gönderir. Bu durumda blok zinciri, sözleşmeden ETH’yi belirli bir adrese gönderecek.

Ether’in Sözleşmeye Gönderilmesi

  1. Öncelikle ödenebilir bir fallback yöntemi seçmeniz gerekir.

function () payable {

}

  1. Akıllı sözleşmede satış yapmayı düşünmüyorsanız, bu kodları yazmak zorunda değilsiniz ve sözleşmeyi sadece varlıkları tutmak için kullanabilirsiniz. Genel olarak, ETH alıp satmak ve sözleşmeye göndermek, bir adresten sözleşmeye veya sözleşmeden bir adrese göndermek anlamına gelir.

function buyCollectible (uint _certNum)

payable

returns (bool success) {

collStructs [_certNum] .status = “paid”;

collStructs [_certNum] .buyerAddress = msg.sender;

return true;

}

Alıcılar buyCollectible fonksyonunu kullanarak akıllı sözleşmeden istedikleri tutarda varlık satın alabilir.

coll.buyCollectible (2, {from: web3.eth.accounts [3], value: web3.toWei (10, ‘ether’)})

Sözleşme bakiyesini kontrol edebilirsiniz.

web3.fromWei (web3.eth.getBalance (contractAddress), ‘ether’)

.toString ()

Ether’in Sözleşmeden Belirli Bir Adrese Gönderilmesi

  1. Bir sözleşmeden belirli bir adrese ETH göndermenin en basit yolu, ilk ödeme tutarı ile akıllı sözleşmedeki transfer fonksyonunu kullanmaktır. Ödeme tutarı Wei’de saklanır ve çevirme fonksyonlarını kullanarak bu tutarı bir ETH tokenine dönüştürmeniz lazım.

function confirmCollRecv (uint _certNum)

public

returns (bool) {

destinationAddress.transfer (collStructs [_certNum] .price);

collStructs [_certNum] .status = “received”;

return true;

}

  1. Alıcı, varlığın dekontunu gösterir ve tutarlar akıllı sözleşmeden satıcının adresine aktarılır.

coll.confirmCollRecv (2, {from: web3.eth.accounts [3]})

Ayrıca, Web3’te aşağıdaki fonksyonları kullanarak akıllı sözleşmedeki varlık sayısını ve transfer sayısını kontrol edebilirsiniz.

web3.fromWei (web3.eth.getBalance (contractAddress), ‘ether’)

.toString ()

web3.fromWei (web3.eth.getBalance (destinationAddress), ‘ether’)

.toString ()

--

--