İşlemler
İşlemler, hesaplardan gelen kriptografik olarak imzalanmış talimatlardır. Bir hesap, Ethereum ağının durumunu güncellemek için bir işlem başlatacaktır. En basit işlem ETH'yi bir hesaptan diğerine aktarmaktır.
Ön koşullar
Bu sayfayı daha iyi anlamanıza yardımcı olmak için önce Hesaplar ve Ethereum'a giriş bölümlerini okumanızı öneririz.
İşlem ne demek?
Bir Ethereum işlemi, harici olarak sahiplenilmiş bir hesap tarafından başlatılan bir eylemi ifade eder, başka bir deyişle, bir sözleşme değil, bir insan tarafından yönetilen bir hesap. Örneğin Bob, Alice'e 1 ETH gönderirse, Bob'un hesabı borçlandırılmalı ve Alice'inki alacaklandırılmalıdır. Bu durum değiştirme eylemi bir işlem içinde gerçekleşir.
(opens in a new tab)
Diyagram Ethereum EVM resmediciden(opens in a new tab) uyarlanmıştır
EVM'nin durumunu değiştiren işlemlerin tüm ağa yayınlanması gerekir. Herhangi bir düğüm, EVM'de yürütülecek bir işlem için bir talep yayınlayabilir; bu gerçekleştikten sonra, bir madenci işlemi yürütecek ve ortaya çıkan durum değişikliğini ağın geri kalanına yayacaktır.
İşlemler bir ücret gerektirir ve geçerli olabilmesi için madencilik sürecinden geçmelidir. Bu genel bakışı daha basit hâle getirmek için gaz ücretlerini ve madenciliği başka bir konuda ele alacağız.
Gönderilen bir işlem aşağıdaki bilgileri içerir:
recipient
– alıcı adres (eğer harici olarak sahiplenilmiş bir hesapsa, işlem değeri aktaracaktır. Eğer bir sözleşme hesabıysa, işlem sözleşme kodunu yürütecektir)signature
– gönderenin tanımlayıcısı. Bu, gönderenin özel anahtarı işlemi imzaladığında ve gönderenin bu işleme yetki verdiğini doğruladığında oluşturulurvalue
– göndericiden alıcıya aktarılacak ETH miktarı (bir ETH birimi olan WEI cinsinden)data
– isteğe bağlı verileri dahil etmek için opsiyonel alangasLimit
– işlem tarafından tüketilebilecek maksimum gaz birimi miktarı. Gaz birimleri bilgi işlem adımlarını temsil edermaxPriorityFeePerGas
- madenciye bahşiş olarak dahil edilecek maksimum gaz miktarımaxFeePerGas
- işlem için ödenmek istenen maksimum gaz miktarı (baseFeePerGas
vemaxPriorityFeePerGas
dahil)
Gaz, işlemin bir madenci tarafından işlenmesi için gereken hesaplamaya bir referanstır. Kullanıcılar bu hesaplama için bir ücret ödemek zorundadır. gasLimit
ve maxPriorityFeePerGas
madenciye ödenen maksimum işlem ücretini belirler. Gaz hakkında daha fazla bilgi.
İşlem nesnesi biraz şuna benzer:
1{2 from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",3 to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",4 gasLimit: "21000",5 maxFeePerGas: "300",6 maxPriorityFeePerGas: "10",7 nonce: "0",8 value: "10000000000"9}10Tümünü gösterKopyala
Ancak, gönderenin özel anahtarı kullanılarak bir işlem nesnesinin imzalanması gerekir. Bu, işlemin yalnızca göndericiden gelebileceğini ve sahtekârlıkla gönderilmediğini kanıtlıyor.
Geth gibi bir Ethereum istemcisi bu imzalama sürecini yerine getirir.
JSON-RPC(opens in a new tab) çağrısı örneği:
1{2 "id": 2,3 "jsonrpc": "2.0",4 "method": "account_signTransaction",5 "params": [6 {7 "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",8 "gas": "0x55555",9 "maxFeePerGas": "0x1234",10 "maxPriorityFeePerGas": "0x1234",11 "input": "0xabcd",12 "nonce": "0x0",13 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",14 "value": "0x1234"15 }16 ]17}18Tümünü gösterKopyala
Yanıt örneği:
1{2 "jsonrpc": "2.0",3 "id": 2,4 "result": {5 "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",6 "tx": {7 "nonce": "0x0",8 "maxFeePerGas": "0x1234",9 "maxPriorityFeePerGas": "0x1234",10 "gas": "0x55555",11 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",12 "value": "0x1234",13 "input": "0xabcd",14 "v": "0x26",15 "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",16 "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",17 "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"18 }19 }20}21Tümünü gösterKopyala
raw
, imzalanmış işlemin Tekrarlamalı Uzunluk Öneki (RLP) kodlu biçimidirtx
, imzalanmış işlemin JSON biçimidir
İmza hash değeri ile işlemin göndericiden geldiği ve ağa gönderildiği kriptografik olarak kanıtlanabilir.
Veri alanı
İşlemlerin büyük bir çoğunluğu, bir sözleşmeye dıştan sahiplenilmiş bir hesaptan erişir. Çoğu sözleşme Solidity ile yazılmıştır ve veri alanlarını uygulama ikili arayüzü (ABI) ile uyumlu olacak şekilde yorumlar.
İlk dört bayt, fonksiyonun isminin ve argümanlarının hash değerini kullanarak hangi fonksiyonun çağrılacağını belirler. Bazen seçiciden bu veri tabanını(opens in a new tab) kullanarak fonksiyonu tespit edebilirsiniz.
Çağrı verisinin geri kalanı, ABI şartnamesine uygun şekilde şifrelenmiş olan(opens in a new tab) argümanlardır.
Örnek olarak, bu işleme(opens in a new tab) bakalım. Çağrı verisini görmek için Click to see More düğmesini kullanın.
0xa9059cbb
fonksiyon seçicisidir. Bu imza ile bilinen birkaç fonksiyon(opens in a new tab) var. Bu durumda sözleşme kaynak kodu(opens in a new tab) Etherscan'e yüklenmiş, yani fonksiyonun transfer(address,uint256)
olduğunu biliyoruz.
Verinin geri kalanı:
10000000000000000000000004f6742badb049791cd9a37ea913f2bac38d012792000000000000000000000000000000000000000000000000000000003b0559f43
ABI koşullarına göre, tamsayı değerleri (20 bayt tamsayılar olan adresler gibi) ABI içinde 32 bayt kelimelerin önü sıfırlarla doldurulmuş şekilde bulunurlar. Yani to
adresinin 4f6742badb049791cd9a37ea913f2bac38d01279
(opens in a new tab) olduğunu biliyoruz. value
ise 0x3b0559f4 = 990206452'dir.
İşlem türleri
Ethereum'da birkaç farklı işlem türü vardır:
- Düzenli işlemler: Bir cüzdandan diğerine yapılan işlem.
- Sözleşme dağıtım işlemleri: Veri alanının sözleşme kodu için kullanıldığı, "to"' (gönderilen adres) adresi olmayan bir işlem.
- Bir sözleşmenin yürütümü: dağıtılmış akıllı sözleşme ile etkileşime geçen bir işlem. Bu durumda, "to" adresi akıllı sözleşme adresidir.
Gaz hakkında
Belirtildiği gibi, işlemlerin yürütülmesi gaz harcar. Basit transfer işlemleri 21.000 birim Gaz gerektirir.
Dolayısıyla Bob'un 1 ETH'yi Alice'e 190 gwei baseFeePerGas
ve 10 gwei maxPriorityFeePerGas
ile göndermesi için Bob'un aşağıdaki ücreti ödemesi gerekir:
1(190 + 10) * 21.000 = 4.200.000 gwei2--veya--30,0042 ETH4
Bob'un hesabı -1,0042 ETH borçlandırılır
Alice'in hesabı +1,0 ETH alacaklandırılır
Taban ücret yakılacaktır -0,00399 ETH
Madenci +0,000210 ETH bahşişi kendine alır
Gaz, herhangi bir akıllı sözleşme etkileşimi için de gereklidir.
(opens in a new tab)
Diyagram Ethereum EVM resmediciden(opens in a new tab) uyarlanmıştır
İşlemde kullanılmayan gaz, kullanıcı hesabına iade edilir.
İşlem yaşam döngüsü
İşlem gönderildikten sonra aşağıdakiler gerçekleşir:
- Bir işlem gönderdiğinizde, kriptografi bir işlem hash'i oluşturur:
0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
- İşlem daha sonra ağa yayınlanır ve birçok başka işlemi içeren bir havuza dahil edilir.
- Bir madenci, işlemi doğrulamak ve "başarılı" olarak değerlendirmek için işleminizi seçmeli ve bir bloğa eklemelidir.
- Ağ meşgulse ve madenciler buna ayak uyduramıyorsa, bu aşamada beklemeniz gerekebilir.
- İşleminiz "onaylar" alacaktır. Onay sayısı, işleminizi içeren bloktan bu yana oluşturulan blokların sayısıdır. Sayı ne kadar yüksek olursa, ağın işlemi işlemesi ve işlemi tanıması o kadar kesin olur.
- Son bloklar yeniden düzenlenebilir ve bu da işlemin başarısız olduğu izlenimini verebilir; ancak işlem yine de geçerli olabilir ancak farklı bir bloğa dahil edilebilir.
- Sonraki her blok madenciliği ile yeniden düzenleme olasılığı azalır, yani onay sayısı ne kadar fazlaysa, işlem o kadar değişmez olur.
Görsel bir demo
Austin'in işlemlerde, gazda ve madencilikte size yol göstermesini izleyin.
Yazılan İşlem Zarfı
Ethereum'un başlangıçta işlemler için tek bir formatı vardı. Her işlem, adres, değer, veri, v, r ve s için nonce, gaz fiyatı, gaz limiti içeriyordu. Bu alanlar, şöyle görünecek şekilde RLP kodludur:
RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])
Ethereum, erişim listelerini ve EIP-1559(opens in a new tab)'un eski işlem formatlarını etkilemeden uygulanmasını mümkün kılmak için birçok işlem türünü destekleyecek şekilde evrildi.
EIP-2718: Yazılan İşlem Zarfı(opens in a new tab), gelecekteki işlem türleri için bir zarf olan bir işlem türünü tanımlar.
EIP-2718, yazılan işlemler için yeni bir genelleştirilmiş zarftır. Yeni standartta işlemler şu şekilde yorumlanıyor:
TransactionType || TransactionPayload
Burada alanlar şu şekilde tanımlanır:
TransactionType
- toplam 128 olası işlem türü için 0 ile 0x7f arasında bir sayı.TransactionPayload
- işlem türü tarafından tanımlanan rastgele bir bayt dizisi.
Daha fazla okuma
Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve onu ekleyin!