Ana içeriğe geç

Optimal Hesaplama Bütçesi Nasıl Talep Edilir

Solana üzerindeki tüm işlemler Hesaplama Birimleri (CU) kullanır; bu birimler, işleminizin ağ üzerindeki hesaplama kaynaklarını ölçer. İşlemlerinizde öncelik ücretleri öderken, beklediğiniz hesaplama birimlerinin tam miktarını belirtmelisiniz; aksi takdirde, işleminiz için fazla ödeme yaparsınız. Bu kılavuz, işleminiz için hesaplama birimlerini optimize etme konusunda adım adım talimatlar sağlayacaktır.

Hesaplama Bütçesi Nasıl Talep Edilir

ipucu

İşleminizin hesaplama kaynakları üzerinde hassas kontrol sağlamak için Compute Budget programından setComputeUnitLimit talimatını kullanın.

Bu talimat, işleminiz için belirli bir sayıda hesaplama birimi tahsis eder, ihtiyacınız olanı sadece ödemeyi sağlar.

// import { ComputeBudgetProgram } from "@solana/web3.js"

const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({
units: 300,
});

Bu talimat, işleminiz için belirli bir miktar hesaplama birimi tahsis edecektir. Kullanılacak sayıyı nasıl buluyoruz?

simulateTransaction RPC yöntemi verilen bir işlemin tahmin edilen hesaplama birimlerini döndürecektir.

Solana yardımcıları npm paketi şu içeriği sağlar: getSimulationComputeUnits, simulateTransaction kullanarak hesaplama birimlerini hesaplayan küçük bir fonksiyon. Ardından, yeni işleminizde hesaplama birimlerini ayarlayabilir ve optimal bir sonuç için yeni işlemi gönderebilirsiniz.

npm i @solana-developers/helpers

Sözdizimi basit:

getSimulationComputeUnits(
connection: Connection,
instructions: Array<TransactionInstruction>,
payer: PublicKey,
lookupTables: Array<AddressLookupTableAccount>
);

Örneğin:

const units = await getSimulationComputeUnits(
connection,
transactions,
payer.publicKey,
);
bilgi

getSimulationComputeUnits kullanarak, işleminizin harcadığı hesaplama birimleri için uygun miktarda hesaplama birimi kullanan optimal bir işlem oluşturabilirsiniz:

// import { ... } from "@solana/web3.js"

async function buildOptimalTransaction(
connection: Connection,
instructions: Array<TransactionInstruction>,
signer: Signer,
lookupTables: Array<AddressLookupTableAccount>,
) {
const [microLamports, units, recentBlockhash] = await Promise.all([
100 /* Optimal öncelik ücretlerini alın - https://solana.com/developers/guides/advanced/how-to-use-priority-fees*/,
getSimulationComputeUnits(
connection,
instructions,
signer.publicKey,
lookupTables,
),
connection.getLatestBlockhash(),
]);

instructions.unshift(
ComputeBudgetProgram.setComputeUnitPrice({ microLamports }),
);
if (units) {
// birimlere biraz hata payı eklemek probably should
instructions.unshift(ComputeBudgetProgram.setComputeUnitLimit({ units }));
}
return {
transaction: new VersionedTransaction(
new TransactionMessage({
instructions,
recentBlockhash: recentBlockhash.blockhash,
payerKey: signer.publicKey,
}).compileToV0Message(lookupTables),
),
recentBlockhash,
};
}

Bu iki fonksiyonun kaynak kodu için Sammmmmy, aka @stegaBOB'ye teşekkürler.

Özel Hususlar

İşlemler için hesaplama birimleri her zaman istikrarlı değildir. Örneğin, yürüttüğünüz işlem find_program_address çağrısı içeriyorsa, hesaplama kullanımınız değişebilir; bu, bir program türetilmiş adresi bulurken geçerlidir.

tehlike

İşlemlerinizde değişken hesaplama kullanımı varsa, iki şeyden birini yapabilirsiniz:

  1. Zaman içinde işlemleriniz üzerinde bir test çalıştırarak maksimum hesaplama birimi kullanımını bulabilir ve bu sayıyı kullanabilirsiniz.
  2. simulateTransaction'dan dönen hesaplama birimlerini alıp, toplamına bir yüzde ekleyebilirsiniz. Örneğin, %10 daha fazla CU eklemeye karar verdiyseniz ve simulateTransaction'dan aldığınız sonuç 1000 CU ise, işleminiz için 1100 CU ayarlamış olursunuz.

Sonuç

not

İşleminiz için optimal hesaplama birimlerini talep etmek, işleminiz için daha az ödeme yapmanıza ve işleminizi ağ üzerinde daha iyi planlamanıza yardımcı olmak için önemlidir.

Cüzdanlar, dApp'ler ve diğer hizmetler, kullanıcıları için en iyi deneyimi sağlamak amacıyla hesaplama birimi taleplerinin optimal olmasını sağlamalıdır.

Daha Fazla Kaynak

Hesaplama Bütçesi ve ilgili konular hakkında daha fazla bilgi edinebilirsiniz:

  • Hesaplama Bütçesi için belgeler
  • öncelik ücretlerini nasıl kullanacağınız üzerine kılavuz
  • programlardaki hesaplama birimlerini nasıl optimize edeceğiniz üzerine kılavuz