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:
[workspace]members = ["program/programs/*"]resolver = "2"[profile.release]overflow-checks = truelto = "fat"codegen-units = 1[profile.release.build-override]opt-level = 3incremental = falsecodegen-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 nameadıdır, paket adı değil!
Şöyle bir şey:
[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 buildveyacargo build-sbfile ü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-repokomutunu çalıştırırken--mount-pathbayrağını eklemeniz gerekir. Bu, programınızın kütüphane adını içerenCargo.tomldosyası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--remotebayrağı kullanımdan kaldırılmıştır. Önce PDA'nızı yükleyin, ardındanremote submit-jobkomutunu ç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 muchsolana 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 buildsolana 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-3454c1c2b5b3Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.✅ The provided GitHub build matches the onchain hash. On Chain Hash:96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 ExecutableHash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7edCheck the verification status at:https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Joburl: 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 -eexamples/hello_world/target/deploy/hello_world.so -iellipsislabs/hello_world_verifiable_build:latest -p2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn
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 ID2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:"examples/hello_world/target/deploy/hello_world.so"Executable hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executablematches 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: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9Onchain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9Program 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-namedeğerini belirtmemiz gerektiğine dikkat edin.squads_mpldaha önce Anchor ile doğrulandığından--bpfbayrağını kullanıyoruz.
Son Çıktı:
Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cOnchain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cProgram 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: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828Onchain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828Program 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: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Onchain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Program 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 YourProgramIdkomutunu çalıştırarak doğrulayın - Zincir üzerinde PDA yok:
solana-verify verify-from-repo -umkomutunu ç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:
- API, yükseltmenizi algılar ve programınızın doğrulamasını iptal eder.
- 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
- Yükseltme yetkinizi kullanarak yeni bir doğrulama isteği gönderin
- 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-verifykomutunu 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'tcargo install solana-verify# Get the PDA datasolana-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 PDAsolana-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:
- PDA meta verisi gerçektir (zincir üzerinde saklanır)
- PDA'nın deposundaki kaynak kodu, dağıtılan programla eşleşir
- 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 normallysolana-verify buildsolana program deploy <your-program.so> --program-id YourProgramId...# 2. Verify locally first - confirm the hash matchessolana-verify verify-from-repo -um \--program-id YourProgramId... \https://github.com/your-org/your-program# 3. Export the PDA creation transactionsolana-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 verificationsolana-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:
[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 Fieldspreferred_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-txtaracı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?