Solana DokümantasyonuProgram geliştirme

Programları Doğrulama

Bu kılavuz, Solana üzerindeki programları için doğrulanmış derlemeleri uygulamak isteyen geliştiriciler için bir referans olarak hazırlanmıştır. Doğrulanmış derlemelerin ne olduğunu, nasıl kullanılacağını, özel hususları ve zincir üzerindeki programınızın özgünlüğünü sağlamak için en iyi uygulamaları ele alacağız.

Doğrulanmış derlemeler nedir?

Doğrulanmış derlemeler, Solana ağına dağıttığınız çalıştırılabilir programın, deponuzdaki kaynak koduyla eşleşmesini sağlar. Bu sayede, geliştiriciler ve kullanıcılar, zincir üzerinde çalışan programın tam olarak halka açık kod tabanına karşılık geldiğinden emin olabilir, bu da şeffaflığı ve güvenliği teşvik eder.

Doğrulama süreci, zincir üzerindeki programın hash değerini, kaynak kodundan yerel olarak derlenen programın hash değeriyle karşılaştırmayı içerir. Bu, iki versiyon arasında hiçbir tutarsızlık olmadığını garanti eder.

Doğrulanmış bir derleme, doğrulanmamış bir derlemeden daha güvenli olarak kabul edilmemelidir, ancak derleme, geliştiricilerin kaynak kodunun zincir üzerinde dağıtılan kodla eşleştiğini kendi kendilerine doğrulamalarını sağlar. Kaynak kodunu kullanarak, bir geliştirici daha sonra bir işlem gönderirken kodun neyi yürüttüğünü doğrulayabilir.

Doğrulanmış derlemeler süreci Ellipsis Labs ve OtterSec tarafından düşünülmüş ve sürdürülmektedir. Daha fazla ayrıntı için, orijinal doğrulanmış derlemeler deposundaki kılavuzu takip edin ve doğrulama derleme sürecini doğrudan Anza araç setine entegre edin (desteklendiğinde).

Nasıl çalışır?

Doğrulama süreci, zincir üzerindeki programın hash değerini, kaynak kodundan yerel olarak oluşturulan programın hash değeriyle karşılaştırarak yapılır. Programınızı Solana Verify CLI ve Docker kullanarak kontrollü bir ortamda oluşturursunuz. Bu, derleme sürecinin farklı sistemlerde deterministik ve tutarlı olmasını sağlar. Çalıştırılabilir dosyayı elde ettikten sonra, onu Solana ağına dağıtabilirsiniz. Derleme süreci sırasında verify programının bir PDA'sı oluşturulacaktır. Bu PDA, programı doğrulamak için gereken tüm verileri içerir. PDA, program adresini, git url'sini, commit hash'ini ve programı derlemek için kullanılan argümanları içerir.

PDA'daki verileri kullanarak herkes yerel olarak verify program komutunu çalıştırabilir ve programın sağlanan kaynak kodundan derlenip derlenmediğini kontrol edebilir. Böylece herkes tamamen güvensiz bir şekilde kendileri için doğrulama yapabilir veya kullanıcıların doğrulamayı kontrol etmeleri için kolay bir erişim noktası sağlamak üzere OtterSec tarafından sürdürülen kendi doğrulama API'lerini çalıştırabilirler. Bu API çağrılarının Solana Explorer ve SolanaFM gibi diğer yerlerde kullanıldığını görebilirsiniz.

Neden doğrulanmış derlemeleri kullanmalıyım?

Doğrulanmış derlemeleri kullanmak aşağıdaki faydaları sağlar:

  • Güvenlik: Zincir üzerinde çalışan programın kaynak koduyla eşleştiğini garanti ederek, kötü niyetli değişiklikleri önler.

  • Şeffaflık: Diğer kullanıcıların ve geliştiricilerin, zincir üzerindeki programın güvenilir olduğunu, onu açık kaynak kodla karşılaştırarak doğrulamasına olanak tanır.

  • Güven: Doğrulanmış derlemeler, programınızın zincir üzerindeki davranışının açık kaynak kodunuzla uyumlu olduğunu gösterdiği için kullanıcı güvenini artırır. Doğrulanabilir programlar oluştururken, yetkisiz veya kötü niyetli kod çalıştırmayla ilişkili riskleri en aza indirirsiniz. Ayrıca en iyi uygulamalara uymanızı sağlar ve güvenlik araştırmacılarına sizinle iletişime geçmeleri için kolay bir yol sunar. Ayrıca cüzdanlar ve diğer araçlar, doğrulandığı sürece programınızdan gelen işlemlere daha kolay izin verebilir.

  • Keşfedilebilirlik: Programınızın doğrulanmış bir yapısını sağladığınızda, herkes kaynak kodunuzu, belgelerinizi, program SDK'sını veya IDL'yi bulabilir ve ayrıca bir sorun olması durumunda GitHub üzerinden sizinle kolayca iletişime geçebilir.

Doğrulanmış yapıları nasıl oluştururum?

Doğrulanmış yapılar oluşturmak için şu adımları izlemeniz gerekecek:

Özet:

  • Kodunuzu halka açık bir depoya gönderin
  • Docker'da doğrulanmış bir yapı oluşturun
  • Doğrulanmış yapıyı dağıtın
  • Dağıtılan programı halka açık API'ye karşı doğrulayın

Eğer docker konteynerinde oluşturulmamış bir programı doğrularsanız, büyük olasılıkla başarısız olacaktır çünkü Solana program yapıları farklı sistemlerde deterministik değildir.

Docker ve Cargo'yu yükleyin

Gerekli araçları yükleyin, Docker ve Cargo'nun kurulu olduğundan emin olun. Docker tutarlılığı sağlamak için kontrollü bir yapı ortamı sağlar ve Cargo, Rust paketlerini yönetmek için kullanılır.

  • Docker: Platformunuz için Docker'ı yüklemek üzere Docker web sitesindeki adımları izleyin. Kurulduktan sonra, bu kılavuzu takip ederek Docker hizmetinin çalıştığından emin olun.
  • Cargo: Eğer Cargo'nuz henüz kurulu değilse, aşağıdaki komutu çalıştırarak kurabilirsiniz:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Solana Verify CLI'yi yükleyin

Solana Verify CLI, yapıları doğrulamak için kullanılan temel araçtır. Solana Verify CLI şu anda Ellipsis Labs tarafından sürdürülmektedir ve Cargo kullanılarak yüklenebilir.

Şu komutu çalıştırarak yükleyebilirsiniz:

cargo install solana-verify

CLI'nin belirli bir sürümüne ihtiyacınız varsa, sürümü şu şekilde sabitleyebilirsiniz:

cargo install solana-verify --version $VERSION

İsterseniz, belirli bir commit'ten doğrudan bir sürüm yükleyebilirsiniz:

cargo install solana-verify --git https://github.com/Ellipsis-Labs/solana-verifiable-build --rev 13a1db2

Projeyi hazırlama

Bir repository'ye karşı doğrulama yapmak için, repository'nizin kök dizininde bir Cargo.lock dosyası bulunması gerekir. Repository'nizde yalnızca bir program varsa ve kök dizininizde bir cargo.lock dosyası varsa, doğrudan bir sonraki adıma geçip programınızı build edebilirsiniz.

Programınız bir alt klasördeyse ve bir rust workspace'iniz varsa, repository'nizin kök dizininde bir workspace Cargo.toml dosyası oluşturmanız gerekir.

Ön ayar olarak bu Cargo.toml örneğini kullanabilirsiniz:

Cargo.toml
[workspace]
members = ["program/programs/*"]
resolver = "2"
[profile.release]
overflow-checks = true
lto = "fat"
codegen-units = 1
[profile.release.build-override]
opt-level = 3
incremental = false
codegen-units = 1

Programınızın workspace/members dizisinde olduğundan ve programınızın Cargo.toml dosyasında doğru lib adının yapılandırıldığından emin olun.

Önemli olan lib name adıdır, paket adı değil!

Şöyle bir şey:

waffle/Cargo.toml
[package]
name = "waffle"
version = "0.1.0"
edition = "2021"
[lib]
name = "waffle"
crate-type = ["cdylib", "lib"]
[dependencies]
solana-program = "2.1.0"

Bu repository'de alt klasörde bir program içeren bir workspace örneği görebilirsiniz. Ayrıca, program bir alt klasördeyken, daha sonra bu klasörü verify-from-repo komutuna --mount-path olarak eklemeniz gerekeceğini de unutmayın.

Bu depoda bir Anchor örneği bulabilirsiniz. Bu depoda ise yerel bir rust örneği bulabilirsiniz.

Bu Cargo.toml dosyası yerindeyken, bir lock dosyası oluşturmak için cargo generate-lockfile komutunu çalıştırabilir ve programınızı build etmeye devam edebilirsiniz.

Doğrulanabilir Programlar Oluşturma

Solana programınızı doğrulanabilir şekilde build etmek için, workspace'inizin Cargo.toml dosyasını içeren dizine gidin ve şunu çalıştırın:

solana-verify build

Bu, ortamınızı bir docker konteynerine kopyalayacak ve deterministik bir şekilde oluşturacaktır.

Doğrulanmış build'i gerçekten deploy ettiğinizden ve yanlışlıkla anchor build veya cargo build-sbf ile üzerine yazmadığınızdan emin olun, çünkü bunlar büyük olasılıkla aynı hash'i vermeyecek ve dolayısıyla doğrulamanız başarısız olacaktır.

Birden fazla program içeren projeler için, kütüphane adını (paket adını değil) kullanarak belirli bir programı derleyebilirsiniz:

solana-verify build --library-name $PROGRAM_LIB_NAME

Bu süreç, belirleyici derlemeler sağlar ve özellikle belirli sistemlerde (örneğin, M1 MacBook) docker konteyneri içinde çalıştığı için biraz zaman alabilir. Daha hızlı derlemeler için, x86 mimarisi çalıştıran bir Linux makinesi kullanılması önerilir.

Derleme tamamlandıktan sonra, aşağıdaki komutu kullanarak çalıştırılabilir dosyanın hash değerini alabilirsiniz:

solana-verify get-executable-hash target/deploy/$PROGRAM_LIB_NAME.so

Doğrulanabilir Programları Dağıtma

Programınızı derledikten ve hash değerini aldıktan sonra, Solana ağına dağıtabilirsiniz. Güvenli dağıtımlar için Squads Protocol gibi çoklu imza veya yönetişim çözümü kullanmanız önerilir, ancak doğrudan şu şekilde de dağıtabilirsiniz:

solana program deploy -u $NETWORK_URL target/deploy/$PROGRAM_LIB_NAME.so --program-id $PROGRAM_ID --with-compute-unit-price 50000 --max-sign-attempts 100 --use-rpc

Şu anda uygun düşük öncelikli ücreti, örneğin Quicknode gibi rpc sağlayıcınızdan talep edebilirsiniz.

Dağıtılan programın derlenen çalıştırılabilir dosya ile eşleştiğini doğrulamak için şunu çalıştırın:

solana-verify get-program-hash -u $NETWORK_URL $PROGRAM_ID

Farklı Solana kümelerinde (yani devnet, testnet, mainnet) farklı sürümler dağıtmış olabilirsiniz. Bir programa karşı doğrulamak istediğiniz Solana kümesi için doğru ağ URL'sini kullandığınızdan emin olun. Uzaktan doğrulama yalnızca mainnet'te çalışacaktır.

Depolara karşı doğrulama

Bir programı genel deposuna karşı doğrulamak için şunu kullanın:

solana-verify verify-from-repo -u $NETWORK_URL --program-id $PROGRAM_ID https://github.com/$REPO_PATH --commit-hash $COMMIT_HASH --library-name $PROGRAM_LIB_NAME --mount-path $MOUNT_PATH

Doğrulanmış yapıyı program dizininizde çalıştırırken, verify-from-repo komutunu çalıştırırken --mount-path bayrağını eklemeniz gerekir. Bu, programınızın kütüphane adını içeren Cargo.toml dosyasını barındıran klasörün yolu olacaktır.

Bu komut, zincir üzerindeki program hash'ini belirtilen commit hash'inden oluşturulan yürütülebilir hash ile karşılaştırır.

Komutun sonunda, doğrulama verilerinizi zincir üzerinde yüklemek isteyip istemediğiniz sorulacaktır. Bunu yaparsanız, Solana Explorer hemen programınızın doğrulama verilerini gösterecektir. Uzak bir yapı tarafından doğrulanana kadar doğrulanmamış olarak gösterilecektir. Bir sonraki adımda programınızı genel bir API'ye karşı nasıl doğrulayabileceğinizi öğrenin.

Doğrulamayı belirli bir sürüme kilitlemek istiyorsanız, komuta --commit-hash bayrağını ekleyebilirsiniz.

Genel API'ye karşı doğrulama

Doğrulama PDA'nızı verify-from-repo ile zincire yükledikten sonra, OtterSec API'sine uzak doğrulama işi gönderin:

solana-verify remote submit-job --program-id <program-id> --uploader <address>

--uploader, doğrulama PDA'sını yükleyen adrestir; bu genellikle programınızın yükseltme yetkisidir. Programınız bir multisig tarafından kontrol ediliyorsa, bu kılavuzun aşağıdaki multisig doğrulama bölümüne devam edin.

verify-from-repo üzerindeki eski --remote bayrağı kullanımdan kaldırılmıştır. Önce PDA'nızı yükleyin, ardından remote submit-job komutunu çalıştırın.

Bu, OtterSec API'sine bir iş gönderir. İş durumunu şu şekilde kontrol edebilirsiniz:

solana-verify remote get-job --job-id <job-id>

Doğrulama başarıyla tamamlandıktan sonra (bu biraz zaman alabilir), programınızı tek programlar için OtterSec API'sinde ve Solana Explorer, SolanaFM, SolScan ve topluluk tarafından yönetilen SolanaVerify.org web sitesinde (0xDeep ve OtterSec doğrulanmış programlar API'si tarafından sürdürülmektedir) ve son olarak Doğrulanmış Programlar Dune Panosunda doğrulanmış olarak görebileceksiniz; böylece daha sağlıklı bir Solana ekosistemine katkıda bulunmuş olursunuz.

Squads Gibi Bir Multisig Tarafından Kontrol Edilen Programınızı Nasıl Doğrularsınız

Uzak doğrulamanın çalışması için doğrulama verilerini program yetkisi tarafından imzalanmış bir PDA'ya yazmanız gerekir. Programınız bir multisig tarafından kontrol ediliyorsa, bu PDA yazma işlemini dışa aktarabilir ve Squads Protocol veya tercih ettiğiniz başka bir multisig çözümü aracılığıyla gönderebilirsiniz.

1. Doğrulanabilir programı derleyin

Önce programı derleyin:

solana-verify build

Bu, Cargo.lock dosyasında belirtilen Solana sürümünü kullanan bir Docker konteyneri aracılığıyla doğrulanabilir bir derleme oluşturacaktır.

2. Programı dağıtın

solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too much
solana program deploy target/deploy/verify_squads.so

Bu multisig kılavuzunun geri kalanında, örnek program kimliği olarak 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD kullanacağız.

3. Depoyla taahhüt edin ve doğrulayın

Bu işlem tamamlandıktan sonra projeyi GitHub'a gönderiyoruz. İşte bir örnek: https://github.com/solana-developers/verify-squads

İsteğe bağlı: Önce yerel olarak doğrulayıp doğrulayamayacağınıza bakın (bu komut örnek program kimliği 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD kullanır):

solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD

Parametrelerinizin doğru olduğundan emin olmak için.

4. Program yetkisini multisig'e aktarın

Henüz program yetkinizi multisig'e aktarmadıysanız multisig yetkisini kopyalayın. Bir sonraki adımda buna ihtiyacınız olacak.

5. PDA işlemini dışa aktarın

Program yetkiniz yerel olarak sizde olduğunda, solana-verify verify-from-repo komutunu kullanırken derleme verilerini zincire yüklemeniz istenir.

Multisig kullandığınızda bunu yapamayacağınız için PDA işlemini manuel olarak dışa aktarmanız ve ardından işlemi Squads aracılığıyla tetiklemeniz gerekir.

solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader <your program authority> --encoding base58 --compute-unit-price 0

Bu size base58 formatında bir işlem döndürecektir. İşlem denetçisinde kullanmak üzere base64 kodlu bir işlem istiyorsanız --encoding base64 kullanabilirsiniz.

P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D

6. Squads aracılığıyla işlem gönderin

Squads işlem oluşturucusuna gidin ve base58 kodlu işlemi içe aktarın. Simülasyonda işlemin yalnızca osec doğrulama programına ve bilgisayar bütçesi programına çağrı içerdiğinden ve başka hiçbir şey içermediğinden emin olun!

7. Uzak doğrulama işini gönderin

Squads'a yapılan işlem başarılı olduktan sonra uzak işi gönderebilirsiniz:

solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
--uploader <your program authority>

İşte bu kadar! Programınızı bir genel depoyla doğruladınız ve OtterSec API'sine uzak bir iş gönderdинiz. Artık bunu Solana gezgininde ve diğer yerlerde görebilmeniz gerekir.

8. Programı güncelleme (İsteğe bağlı)

Programınızı güncellediğinizde, yeni bir PDA işlemi dışa aktarmanız ve bunu Squads aracılığıyla yeniden göndermeniz gerekir.

Programa güncelleme yapmak için:

solana-verify build
solana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50

Ardından bu tampon yetkisini multisig'e aktarın veya tampon alanını doğrudan multisig yetkisiyle oluşturun.

solana program set-buffer-authority Fu3k79g53ZozAj47uq1tXrFy4QbQYh7y745DDsxjtyLR --new-buffer-authority 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

9. Yeni PDA işlemini dışa aktarın ve gönderin

Değişikliklerinizi GitHub'a kaydetmeyi unutmayın. PDA yükseltme işlemini tekrar dışa aktarın:

solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

İşlemi Squads aracılığıyla tekrar gönderin.

Örnek bir işlemi buradan görebilirsiniz.

Ardından başka bir uzak derleme için gönderin:

solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

Sonuç şuna benzer bir şey olmalıdır:

Verification request sent with request id: b63339d2-163e-49ac-b55d-3454c1c2b5b3
Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18
minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.
The provided GitHub build matches the onchain hash. On Chain Hash:
96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Executable
Hash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:
https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7ed
Check the verification status at:
https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Job
url: https://verify.osec.io/job/b63339d2-163e-49ac-b55d-3454c1c2b5b3

Tebrikler! Programınızı multisig yükseltmesinin ardından başarıyla doğruladınız!

Docker imajından doğrulama

Aşağıdaki komutu çalıştırarak programınızı bir Docker imajına karşı da doğrulayabilirsiniz:

solana-verify verify-from-image -e
examples/hello_world/target/deploy/hello_world.so -i
ellipsislabs/hello_world_verifiable_build:latest -p
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn

Bu komut, ellipsislabs/hello_world_verifiable_build:latest konumunda depolanan imajı yükler ve konteynerdeki yürütülebilir dosya yolunun karmasının komuta sağlanan zincir üstü programın karmasıyla aynı olduğunu doğrular. Derleme zaten bir imaja yüklendiğinden, uzun sürebilecek yürütülebilir dosyanın tam olarak yeniden derlenmesine gerek yoktur.

ellipsislabs/hello_world_verifiable_build:latest imajını oluşturan Dockerfile, ellipsis labs deposunda /examples/hello_world konumunda bulunabilir.

Beklenen çıktı aşağıdadır:

Verifying image: "ellipsislabs/hello_world_verifiable_build:latest", on network
"https://api.mainnet.solana.com" against program ID
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:
"examples/hello_world/target/deploy/hello_world.so"
Executable hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executable
matches onchain program data ✅

Doğrulanmış derleme örneği

Aşağıda, bu depo'daki kaynak kodu kullanılarak FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv kimliğine sahip örnek bir programın doğrulanmasına ilişkin bir örnek verilmiştir:

solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Varsayılan olarak verify-from-repo komutu, ana daldaki son commit'i alır. Depo üzerinde çalışmaya devam etmek istediğiniz durumlarda commit-hash parametresini kullanarak belirli bir commit de tanımlayabilirsiniz: --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

İstendiğinde, doğrulama PDA'nızı zincire yüklemek için evet yanıtını verin. Ardından OtterSec API'sine karşı uzaktan doğrulama işi gönderin:

solana-verify remote submit-job --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --uploader <your-upgrade-authority>

Halihazırda doğrulanmış popüler programlar

Phoenix

solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1

Son Çıktı:

Executable Program Hash from repo: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Onchain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Program hash matches ✅

Squads V3

solana-verify verify-from-repo https://github.com/Squads-Protocol/squads-mpl --commit-hash c95b7673d616c377a349ca424261872dfcf8b19d --program-id SMPLecH534NA9acpos4G6x7uf3LWbCAwZQE9e8ZekMu -um --library-name squads_mpl --bpf

Squads deposu birden fazla program içerdiğinden library-name değerini belirtmemiz gerektiğine dikkat edin. squads_mpl daha önce Anchor ile doğrulandığından --bpf bayrağını kullanıyoruz.

Son Çıktı:

Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
Onchain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
Program hash matches ✅

Drift V2

solana-verify verify-from-repo -um --program-id dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH https://github.com/drift-labs/protocol-v2 --commit-hash 110d3ff4f8ba07c178d69f9bfc7b30194fac56d6 --library-name drift

Son Çıktı:

Executable Program Hash from repo: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
Onchain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
Program hash matches ✅

Marginfi V2

solana-verify verify-from-repo -um --program-id MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA https://github.com/mrgnlabs/marginfi-v2 --commit-hash d33e649e415c354cc2a1e3c49131725552d69ba0 --library-name marginfi -- --features mainnet-beta

Son Çıktı:

Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Onchain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program hash matches ✅

Sıkça sorulan sorular

Doğrulamam başarısız oluyor. Ne yapmalıyım?

Şu yaygın sorunları kontrol edin:

  • Yanlış imzalayan: İmzalayanınızın programın yükseltme yetkisi olduğunu solana program show YourProgramId komutunu çalıştırarak doğrulayın
  • Zincir üzerinde PDA yok: solana-verify verify-from-repo -um komutunu çalıştırın ve istendiğinde EVET'i seçin. PDA yüklenmeden API, doğrulama meta verilerinizi alamaz.
  • PDA veri uyuşmazlığı: Programınızı yeniden dağıttıysanız PDA'nızı güncelleyin. PDA verileriniz dağıtılan programınızla eşleşmelidir.
  • Hatalı commit hash'i: PDA'nızı tam olarak dağıttığınız commit hash'ini kullanarak oluşturun
  • Derleme ortamı farklılıkları: PDA oluştururken solana-verify ile Docker kullanın

Yerel derleme hash'im zincir üzerindeki hash ile eşleşmiyor. Neden?

Bu genellikle şu anlama gelir:

  • Farklı Rust/Solana araç zinciri sürümleri kullanıyorsunuz
  • Derlemeler arasında bağımlılıklarınız güncellendi
  • Docker container içinde derleme yapmadınız
  • Yanlış commit'i kontrol ettiniz

Bunu, tam olarak dağıttığınız commit'i kullanarak Docker'da solana-verify build ile derleyerek düzeltin.

Doğrulamam ne kadar sürer?

Program boyutunuza göre şu süreleri bekleyin:

  • Basit programlar: 1-5 dakika
  • Karmaşık programlar: 5-15 dakika
  • Çok büyük programlar: 30 dakikaya kadar

İlerlemenizi iş durumu uç noktasını kullanarak takip edin.

Programım değiştirilemez (yükseltme yetkisi yok). Nasıl doğrulayabilirim?

Programınızın yükseltme yetkisi yoksa veya bir PDA oluşturamadan önce değiştirilemez hale getirildiyse, bu durum için beyaz listeye alınmış bir adresimiz bulunmaktadır. contact@osec.io adresinden bizimle iletişime geçin, programınızın doğrulanması için size yardımcı olalım.

PDA nedir ve neden önemlidir?

PDA'nız (Program Derived Account), güvensiz doğrulamayı mümkün kılar:

  • Zincir Üstü Depolama: Doğrulama meta verilerinizi (repo URL'si, commit hash'i, derleme parametreleri) Otter Verify programına ait bir PDA'da zincir üzerinde saklayın (verifycLy8mB96wd9wqq3WDXQwM4oU6r42Th37Db9fC)
  • Kriptografik Bağlantı: PDA'nız, program adresinizden türetilir ve doğrulama verilerinize değiştirilemez bir bağlantı oluşturur
  • Merkeziyetsiz Güven: Herkes PDA'nızı okuyabilir ve programınızı bağımsız olarak doğrulayabilir

API'yi kullanmadan önce neden PDA oluşturmam gerekiyor?

API yalnızca zincir üzerindeki PDA'larla çalışır, çünkü:

  • Güvensiz: API, rastgele verileri reddeder - yalnızca yükseltme yetkilinizin zincir üzerinde depoladığı verileri kullanır
  • Daha Basit: Sadece imzalayan + program_id sağlayın; API geri kalanını PDA'nızdan alır
  • Kurcalamaya Karşı Korumalı: PDA'nız, herkesin bağımsız olarak doğrulayabileceği değiştirilemez bir kayıt oluşturur
  • Sahiplik Kanıtı: İmzalayanınız, programı kontrol ettiğinizi kriptografik olarak kanıtlayan yükseltme yetkisi olmalıdır

Programımı ne sıklıkla doğrulamalıyım?

Programınızı şu durumlarda doğrulayın:

  • Her dağıtım veya yükseltmeden sonra
  • Kaynak deponuzu güncellediğinizde
  • Bunun dışında yeniden doğrulama konusunda endişelenmeyin - API, tüm programları her 24 saatte bir otomatik olarak yeniden doğrular

Programımı yükselttiğimde ne olur?

Yükseltmeden sonra şu adımları izleyin:

  1. API, yükseltmenizi algılar ve programınızın doğrulamasını iptal eder.
  2. PDA'nızı yeni doğrulama meta verileriyle güncelleyin:
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
  1. Yükseltme yetkinizi kullanarak yeni bir doğrulama isteği gönderin
  2. API, yeni sürümünüzü güncellenmiş PDA ile doğrulayacak

Önemli: PDA'nızı her zaman yükseltilmiş programın yeni commit hash'iyle yükseltme yetkinizi kullanarak güncelleyin.

Doğrulama sonuçlarına güvenebilir miyim?

Evet - sistem güvensiz (trustless) ve bağımsız olarak doğrulanabilir şekilde tasarlanmıştır:

Güvenilir Kılan Faktörler:

  • Zincir Üzeri PDA: Doğrulama meta verileriniz zincir üzerinde saklanır, herhangi bir merkezi otorite tarafından kontrol edilmez
  • Yükseltme Yetkisi Kanıtı: Yalnızca programınızın yükseltme yetkisine sahip olan kişi PDA oluşturabilir/güncelleyebilir
  • Bağımsız Doğrulama: Herkes PDA'nızı okuyarak ve solana-verify komutunu yerel olarak çalıştırarak doğrulama yapabilir
  • Sürekli Yeniden Doğrulama: API, tüm programları her 24 saatte bir otomatik olarak yeniden doğrular

Bu Sınırlamaları Göz Önünde Bulundurun:

  • Doğrulama, kaynağın dağıtımla eşleştiğini onaylar - kodunuzun güvenli olduğunu DEĞİL
  • Programlarla etkileşime girmeden önce kodu her zaman inceleyin
  • Doğrulanmış ≠ denetlenmiş veya güvenli
  • Güvenilir bir kaynaktan geldiğini teyit etmek için PDA'daki depoyu ve commit'i kontrol edin

Bir programı bağımsız olarak nasıl doğrulayabilirim?

Herhangi bir programı zincir üzeri PDA'yı okuyarak ve doğrulamayı yerel olarak çalıştırarak kendiniz doğrulayabilirsiniz:

1. Adım: Zincir Üzeri PDA'yı Okuyun

# Install solana-verify if you haven't
cargo install solana-verify
# Get the PDA data
solana-verify list-program-pdas --program-id YourProgramId...

2. Adım: Yerel Olarak Doğrulayın

# Verify using the repository and commit & other arguments from the PDA
solana-verify verify-from-repo \
--program-id YourProgramId... \
https://github.com/your-org/your-program
--commit-hash <commit-hash>
... (other arguments from the PDA)
# Confirm the hash output matches the onchain program hash

Bu şunları kanıtlar:

  1. PDA meta verisi gerçektir (zincir üzerinde saklanır)
  2. PDA'nın deposundaki kaynak kodu, dağıtılan programla eşleşir
  3. API'ye güvenmenize gerek yoktur - her şeyi zincir üzerinde kendiniz doğrulayın

Başka biri izinsiz programımı doğrulayabilir mi?

Evet, bu yüzden imzalayanın yükseltme yetkisine sahip olmasını şart koşuyoruz. Doğrulamayı yalnızca imzalayan kişi yükseltme yetkisine sahipse geçerli sayıyoruz.

Doğrulanabilir derlemeler oluşturmak için nelere ihtiyacım var?

Şu araçları yükleyin:

  • Docker (deterministik derlemeler için)
  • Cargo (Rust paket yöneticisi)
  • Solana Verify CLI: cargo install solana-verify
  • Kaynak kodunuzu içeren herkese açık bir Git deposu

Özel depoları doğrulayabilir miyim?

Hayır - doğrulama, herkese açık kaynak kodu gerektirir:

  • PDA'nız, herkesin erişebileceği bir herkese açık depo URL'si saklar
  • Güvensiz doğrulama, herkese açık kod erişimine bağlıdır
  • Kullanıcıların programınızın ne yaptığını anlayabilmesi için kaynak kodunuzu okumaları gerekir
  • Tüm amacı, kullanıcıların kaynak kodunun dağıtımla eşleştiğini bağımsız olarak doğrulamasına olanak tanımaktır

Özel depolar, doğrulama sisteminin temel güven modelini bozar.

Squads Multisig tarafından kontrol edilen bir programı nasıl doğrularım?

Multisig kontrollü programlar için şu adımları izleyin:

# 1. Build and deploy normally
solana-verify build
solana program deploy <your-program.so> --program-id YourProgramId...
# 2. Verify locally first - confirm the hash matches
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
# 3. Export the PDA creation transaction
solana-verify export-pda-tx \
--program-id YourProgramId... \
https://github.com/your-org/your-program
# 4. Execute the PDA transaction through your Squads Multisig interface
# 5. After multisig execution, trigger remote verification
solana-verify remote submit-job \
--program-id YourProgramId... \
--uploader YourMultisigAddress...

Kritik: PDA işlemini dışa aktarmadan önce derleme karmasının eşleştiğini onaylamak için her zaman yerel olarak doğrulayın (adım 2).

Sonuç

Solana'da doğrulanmış derlemeleri kullanmak, ağdaki programlarınızın bütünlüğünü ve güvenilirliğini sağlar; ayrıca geliştiricilerin SDK'larınızı doğrudan Solana Explorer üzerinden bulmasına olanak tanır. Solana Verify CLI ve Docker gibi araçlardan yararlanarak kaynak kodunuzla uyumlu, doğrulanabilir ve güvenli derlemeler sürdürebilirsiniz. Tutarlı ortamlar kullanmak için gerekli önlemleri her zaman alın ve güvenli yükseltmeler ile dağıtımlar için yönetişim çözümlerini değerlendirin.

Güvenlik + Sorumluluk Reddi

Doğrulanmış derlemeler, Solana programlarınızın bütünlüğünü sağlamak için güçlü bir araç olsa da varsayılan kurulumda tamamen güvensiz değildir. Docker imajları, Solana Vakfı tarafından derlenir ve barındırılır.

Projenizi indirilen bir Docker imajı içinde derlediğinizi ve potansiyel olarak hassas bilgiler de dahil olmak üzere tüm kurulumunuzun derleme için bu Docker imajına kopyalandığını unutmayın.

Tamamen güvensiz bir kuruluma sahip olmak istiyorsanız Docker imajlarını kendiniz derleyebilir ve kendi altyapınızda barındırabilirsiniz. Bu sayede Docker imajlarının kurcalanmadığından emin olabilirsiniz. Kendi Docker imajlarınızı oluşturmaya yönelik betikleri Doğrulanmış derlemeler deposunda bulabilirsiniz; depoyu çatallayarak GitHub Actions'ı kendiniz çalıştırabilir ya da bunların doğru olduğunu doğrulayabilirsiniz.

Ayrıca uzaktan doğrulama için OtterSec API'sine ve Solana Explorer'a belli ölçüde güveniyorsunuz.

API veya Solana Explorer ele geçirilirse yanlış bilgi görüntüleyebilir.

Tamamen güvensiz bir kuruluma sahip olmak istiyorsanız Verify API'yi kendiniz çalıştırabilir veya zincir üzerindeki doğrulama verilerini kullanarak verify-from-repo komutuyla program doğrulamasını yerel olarak kendiniz gerçekleştirebilirsiniz. Bu veriler, programın dağıtım yetkisi ve doğrulama programından türetilen bir PDA'da saklanmaktadır.

Doğrulama programı OtterSec ekibi tarafından dağıtılmıştır ve henüz dondurulmamıştır; dolayısıyla herhangi bir zamanda güncellenebilir.

Solana Vakfı, OtterSec ve Ellipsis Labs ekibi, doğrulanmış yapılar pipeline'ının kullanımından kaynaklanabilecek herhangi bir kayıp veya zarardan sorumlu değildir.

Solana Programları için Security.txt

Doğrulanmış yapılara ek olarak programınıza bir security.txt dosyası da ekleyebilirsiniz. Gelecekte, uygulandığında, security.txt doğrulama PDA'sında saklanan doğrulama verilerine kolay erişim için doğrulayıcı pubkey'i barındıracaktır. Bir programı derlemek ve doğrulamak için gereken tüm bilgileri içeren PDA, programın adresi ve doğrulayıcı pubkey'inden türetilir. Varsayılan olarak bu, programı derleyip dağıtan pubkey ile aynıdır. Ancak security.txt dosyasında belirtilebilecek başka bir pubkey de olabilir.

security.txt özelliği, geliştiricilerin iletişim ve güvenlik bilgilerini doğrudan Solana akıllı sözleşmelerine gömmesine olanak tanır. securitytxt.org sitesinden ilham alınan bu yaklaşım, güvenlik araştırmacılarının yalnızca sözleşmenin adresini bilseler dahi proje yöneticilerine ulaşabilmeleri için standart bir yöntem sunar.

Neden security.txt kullanılmalı?

Pek çok proje için, özellikle küçük veya özel olanlar için, geliştiricileri yalnızca sözleşme adresinden tespit etmek zor ve zaman alıcı olabilir. Programa bir security.txt dosyası yerleştirmek, güvenlik araştırmacılarının doğru kişilerle kolayca iletişime geçmesini sağlar; bu da olası istismarların önüne geçebilir ve hata raporlarının zamanında iletilmesini güvence altına alır.

security.txt nasıl uygulanır

Solana programınıza bir security.txt eklemek için aşağıdaki adımları izleyin:

Cargo.toml dosyanıza solana-security-txt bağımlılığını ekleyin:

Cargo.toml
[dependencies]
solana-security-txt = "1.1.1"

Güvenlik bilgilerinizi tanımlamak için sözleşmenizde security_txt! makrosunu kullanın. İletişim bilgileri, proje URL'leri ve hatta bir güvenlik politikası ekleyebilirsiniz. İşte bir örnek:

#[cfg(not(feature = "no-entrypoint"))]
use {default_env::default_env, solana_security_txt::security_txt};
#[cfg(not(feature = "no-entrypoint"))]
security_txt! {
name: "MyProject",
project_url: "https://myproject.com",
contacts: "email:security@myproject.com,discord:security#1234",
policy: "https://myproject.com/security-policy",
// Optional Fields
preferred_languages: "en,de",
source_code: "https://github.com/solana-developers/solana-game-preset",
source_revision: "5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",
source_release: "",
encryption: "",
auditors: "Verifier pubkey: 5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",
acknowledgements: "Thank you to our bug bounty hunters!"
}

security.txt bilgileri programınıza gömüldükten sonra, Solana Explorer gibi araçlar aracılığıyla kolayca sorgulanabilir; bu sayede iletişim ve güvenlik bilgileriniz olası sorunları bildirmek isteyen herkese sunulmuş olur.

En iyi uygulamalar

  • Bağlantı Kullanın: Değişmesi olası bilgiler için (örn. iletişim bilgileri) bu bilgileri sözleşmeye sabit kodlamak yerine bir web sayfasına bağlantı vermeniz önerilir. Bu yaklaşım, sık sık program güncellemesi yapma ihtiyacını ortadan kaldırır.

  • Doğrulama: Dağıtımdan önce, hem zincir üstü programları hem de yerel ikili dosyaları doğrulayabilen query-security-txt aracını kullanarak biçimi ve içeriği doğrulayın:

query-security-txt target/bpfel-unknown-unknown/release/my_contract.so

Güvenlik iletişim bilgilerini doğrudan sözleşmenize gömerek araştırmacıların size ulaşmasını kolaylaştırır, Solana ekosistemi içinde daha iyi güvenlik ve iletişimi teşvik edersiniz.

Bu, security.txt'nin Solana Explorer'da nasıl göründüğüne dair bir örnektir

security.txt projesi Neodyme Labs tarafından sürdürülmektedir

Doğrulama durumunu kontrol edebilir ve doğrulanmış programlara verify.osec.io adresinden göz atabilirsiniz.

Is this page helpful?

İçindekiler

Doğrulanmış derlemeler nedir?Nasıl çalışır?Neden doğrulanmış derlemeleri kullanmalıyım?Doğrulanmış yapıları nasıl oluştururum?Docker ve Cargo'yu yükleyinSolana Verify CLI'yi yükleyinProjeyi hazırlamaDoğrulanabilir Programlar OluşturmaDoğrulanabilir Programları DağıtmaDepolara karşı doğrulamaGenel API'ye karşı doğrulamaSquads Gibi Bir Multisig Tarafından Kontrol Edilen Programınızı Nasıl Doğrularsınız1. Doğrulanabilir programı derleyin2. Programı dağıtın3. Depoyla taahhüt edin ve doğrulayın4. Program yetkisini multisig'e aktarın5. PDA işlemini dışa aktarın6. Squads aracılığıyla işlem gönderin7. Uzak doğrulama işini gönderin8. Programı güncelleme (İsteğe bağlı)9. Yeni PDA işlemini dışa aktarın ve gönderinDocker imajından doğrulamaDoğrulanmış derleme örneğiHalihazırda doğrulanmış popüler programlarPhoenixSquads V3Drift V2Marginfi V2Sıkça sorulan sorularDoğrulamam başarısız oluyor. Ne yapmalıyım?Yerel derleme hash'im zincir üzerindeki hash ile eşleşmiyor. Neden?Doğrulamam ne kadar sürer?Programım değiştirilemez (yükseltme yetkisi yok). Nasıl doğrulayabilirim?PDA nedir ve neden önemlidir?API'yi kullanmadan önce neden PDA oluşturmam gerekiyor?Programımı ne sıklıkla doğrulamalıyım?Programımı yükselttiğimde ne olur?Doğrulama sonuçlarına güvenebilir miyim?Bir programı bağımsız olarak nasıl doğrulayabilirim?Başka biri izinsiz programımı doğrulayabilir mi?Doğrulanabilir derlemeler oluşturmak için nelere ihtiyacım var?Özel depoları doğrulayabilir miyim?Squads Multisig tarafından kontrol edilen bir programı nasıl doğrularım?SonuçGüvenlik + Sorumluluk ReddiSolana Programları için Security.txtNeden security.txt kullanılmalı?security.txt nasıl uygulanırEn iyi uygulamalar
Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.