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 depo karşısında doğrulama yapmak için deponuzun kök dizininde bir Cargo.lock dosyası olması gerekir. Eğer deponuzda sadece bir program varsa ve kök dizinde bir cargo.lock dosyanız varsa, doğrudan bir sonraki adıma geçebilir ve programınızı oluşturabilirsiniz.

Eğer programınız bir alt klasördeyse ve bir rust çalışma alanınız varsa, deponuzun kök dizininde bir çalışma alanı 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 paket adı değil, lib name adıdır!

Şö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 depoda bir alt klasörde programı olan bir çalışma alanı örneği görebilirsiniz. Ayrıca, program bir alt klasörde olduğunda, daha sonra bu klasörü --mount-path olarak verify-from-repo komutuna eklemeniz gerektiğini unutmayın.

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

Bu Cargo.toml dosyası yerleştirildikten sonra, bir kilit dosyası oluşturmak için cargo generate-lockfile komutunu çalıştırabilir ve programınızı oluşturmaya devam edebilirsiniz.

Doğrulanabilir Programlar Oluşturma

Solana programınızı doğrulanabilir şekilde oluşturmak için, çalışma alanınızın 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.

Gerçekten doğrulanmış yapıyı dağıttığınızdan emin olun ve yanlışlıkla anchor build veya cargo build-sbf ile üzerine yazmayın, çünkü bunlar büyük olasılıkla aynı hash değerini üretmeyecek ve 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

Program dizininizde doğrulanmış derlemeyi ç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ı içeren 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

Son olarak, programı doğrulama API'sini çalıştıran herkese karşı doğrudan doğrulayabilirsiniz:

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

Ücretsiz RPC'lerin hız sınırlarına takılmamak için ücretli bir RPC Url kullanmanız önerilir. Bu nedenle, -um yerine daha güvenilir bir doğrulama için --url yourRpcUrl kullanmalısınız.

--remote bayrağı, OtterSec API'sine bir yapı isteği gönderir ve bu da programınızın uzaktan bir yapı oluşturulmasını tetikler. Yapı tamamlandığında, sistem programınızın zincir üzerindeki hash'inin, deponuzdan oluşturulan yapı ürününün hash'i ile eşleştiğini doğrular.

Varsayılan olarak OtterSec API kullanılır.

Doğrulama verilerini zincir üzerinde yüklemek isteyip istemediğiniz sorulduğunda evet seçeneğini seçtiğinizden emin olun. Bu, API tarafından doğrulama verilerini yüklediğinizi doğrulamak için kullanılır.

Ayrıca şu komutu kullanarak manuel olarak uzak bir iş tetikleyebilirsiniz:

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

Yükleyicinin, PDA'ya yazma yetkisine sahip adres olduğu yer. Bu çoğu durumda program yetkisi olmalıdır. Eğer programınız bir multisig tarafından kontrol ediliyorsa, lütfen bu kılavuzun aşağıdaki multisig doğrulama bölümünde devam edin.

Bu, OtterSec API'sine bir iş gönderecektir ve ardından iş durumunu şu şekilde doğrulayabilirsiniz:

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

Doğrulama başarıyla tamamlandıktan sonra (bu biraz zaman alabilir), programınızı doğrulanmış olarak tek programlar için OtterSec API'sinde, Solana Explorer'da, SolanaFM'de, SolScan'de ve sonunda 0xDeep tarafından sürdürülen topluluk destekli web sitesi SolanaVerify.org'da, OtterSec doğrulanmış programlar API'sinde ve son olarak daha sağlıklı bir Solana ekosistemine katkıda bulunan Doğrulanmış Programlar Dune Paneli'nde görebileceksiniz.

Programınız Squads gibi bir Multisig tarafından kontrol edildiğinde nasıl doğrulanır

Uzaktan doğrulamanın çalışması için doğrulama verilerini program yetkisi tarafından imzalanan bir PDA'ya yazmanız gerekir. Eğer 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ı oluşturun

Önce programı oluşturun:

solana-verify build

Bu, Cargo.lock dosyasında belirtilen solana sürümünü kullanan bir docker konteyneri kullanarak doğrulanabilir bir yapı 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. Depola ve repoya karşı doğrula

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

İsteğe bağlı: Önce yerel olarak doğrulayabilir misiniz kontrol edin (bu komut örnek program ID'sini kullanır 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD):

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ınızın yetkisini multisig'e aktarmadıysanız ve multisig yetkisini kopyalamadıysanız. Bir sonraki adımda buna ihtiyacınız olacak.

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

Program yetkiniz yerel olarak bulunduğunda, solana-verify verify-from-repo komutunu kullanırken yapı verilerini zincir üzerine yüklemeniz istenir.

Multisig kullanırken 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 inceleyicide kullanmak için base64 ile kodlanmış bir işlem isterseniz, --encoding base64 kullanabilirsiniz.

P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D

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

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

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

Squads'a işlem başarıyla gönderildikten sonra uzaktan işi gönderebilirsiniz:

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

İşte bu kadar! Programınızı halka açık bir repoya karşı doğruladınız ve OtterSec API'sine uzaktan bir iş gönderdiniz. Artık solana explorer ve diğer yerlerde görünmesi gerekiyor.

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 tekrar Squads aracılığıyla göndermeniz gerekir.

Programda güncelleme yapmak:

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 çoklu imzaya aktarın veya doğrudan çoklu imza yetkisiyle tamponu oluşturun.

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

9. Yeni PDA işlemini dışa aktarma ve gönderme

Değişikliklerinizi github'a commit etmeyi 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 tekrar Squads aracılığıyla gönderin.

Örnek bir işlemi burada görebilirsiniz.

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

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

Sonuç şuna benzer 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 on-chain 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, çoklu imza yükseltmesinden sonra programınızı 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 adresinde depolanan imajı yükler ve konteynerdeki yürütülebilir dosya yolunun hash değerinin, komuta sağlanan zincir üstü programın hash değeriyle aynı olduğunu doğrular. İmaj zaten yüklendiği için, uzun zaman alabilen tam bir yürütülebilir dosya yeniden derlemesine gerek yoktur.

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

Aşağıda beklenen çıktı yer almaktadır:

Verifying image: "ellipsislabs/hello_world_verifiable_build:latest", on network
"https://api.mainnet-beta.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 on-chain program data ✅

Doğrulanmış yapı örneği

İşte bu depo kaynak kodunu kullanarak FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv kimliğine sahip bir örnek programın doğrulanması:

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 istiyorsanız, commit-hash parametresini kullanarak belirli bir commit'i de tanımlayabilirsiniz: --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Son olarak, programı doğrudan OtterSec API'sine karşı da doğrulayabilirsiniz:

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

--remote komutu, OtterSec API'sine bir yapı isteği gönderir ve bu da programınızın uzaktan bir yapı oluşturulmasını tetikler. Yapı tamamlandığında, sistem programınızın zincir üstündeki hash değerinin, deponuzdan oluşturulan yapı ürününün hash değeriyle eşleştiğini doğrular.

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
On-chain 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ği için library-name belirtmemiz gerektiğine dikkat edin. squads_mpl daha önce Anchor ile doğrulandığı için --bpf bayrağını kullanıyoruz.

Son Çıktı:

Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
On-chain 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
On-chain 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
On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program hash matches ✅

Sonuç

Solana'daki doğrulanmış yapıları kullanmak, ağdaki programlarınızın bütünlüğünü ve güvenilirliğini sağlar ve geliştiricilerin SDK'larınızı doğrudan Solana Explorer'dan bulmalarına olanak tanır. Solana Verify CLI ve Docker gibi araçları kullanarak, kaynak kodunuzla uyumlu, doğrulanabilir ve güvenli yapılar oluşturabilirsiniz. Her zaman tutarlı ortamlar kullanmak için gerekli önlemleri alın ve güvenli yükseltmeler ve dağıtımlar için yönetişim çözümlerini göz önünde bulundurun.

Güvenlik + Sorumluluk Reddi

Doğrulanmış yapılar, 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 oluşturulur ve barındırılır.

Projenizi indirilen bir docker imajında oluşturduğunuzu ve potansiyel olarak hassas bilgiler de dahil olmak üzere tüm kurulumunuzun bu docker imajına kopyalandığını unutmayın.

Tamamen güvensiz bir kurulum istiyorsanız, docker imajlarını kendiniz oluşturabilir ve kendi altyapınızda barındırabilirsiniz. Bu şekilde docker imajlarının değiştirilmediğinden emin olabilirsiniz. Kendi docker imajlarınızı oluşturmak için gereken komut dosyalarını Doğrulanmış yapılar deposunda bulabilir, bu depoyu çatallayabilir ve github eylemlerini kendiniz çalıştırabilir veya doğru olduklarını doğrulayabilirsiniz.

Ayrıca, uzaktan doğrulama için OtterSec API'sine ve Solana Explorer'a belirli bir dereceye kadar güveniyorsunuz.

API veya Solana Explorer, ele geçirilirse potansiyel olarak yanlış bilgiler gösterebilir.

Tamamen güvensiz bir kurulum istiyorsanız, Verify API'yi kendiniz çalıştırabilir veya program doğrulamasını verify-from-repo komutunu kullanarak yerel olarak kendiniz çalıştırabilirsiniz. Bu komut, programların dağıtım yetkisinden ve doğrulama programından türetilen bir PDA'da kaydedilen zincir üzerindeki doğrulama verilerini kullanır.

Doğrulama programı OtterSec ekibi tarafından dağıtılmıştır ve henüz dondurulmamıştır, bu nedenle herhangi bir zamanda güncellenebilir.

Solana Vakfı, OtterSec ve Ellipsis Labs ekibi, doğrulanmış derleme hattının kullanımından kaynaklanabilecek herhangi bir kayıp veya hasardan sorumlu değildir.

Solana programları için security.txt

Doğrulanmış derlemelere 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 içerecektir. Bir programı oluşturmak 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ı oluşturan ve dağıtan pubkey ile aynıdır. Ancak security.txt içinde 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ömmelerine olanak tanır. securitytxt.org'dan esinlenen bu yaklaşım, güvenlik araştırmacılarının yalnızca sözleşmenin adresini bilseler bile proje yöneticilerine ulaşmaları için standartlaştırılmış bir yol sağlar.

Neden security.txt kullanmalı?

Özellikle daha küçük veya özel projeler için, yalnızca sözleşme adresinden geliştiricileri belirlemek zor ve zaman alıcı olabilir. Program içine bir security.txt dosyası gömmek, güvenlik araştırmacılarının doğru kişilerle kolayca iletişim kurabilmesini sağlar, bu da potansiyel olarak istismarları önler ve zamanında hata raporları alınmasını sağlar.

security.txt nasıl uygulanır

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

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

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

Sözleşmenizde güvenlik bilgilerinizi tanımlamak için security_txt! makrosunu kullanın. İletişim bilgilerinizi, proje URL'lerini ve hatta bir güvenlik politikasını dahil edebilirsiniz. İş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, böylece iletişim ve güvenlik bilgileriniz potansiyel sorunları bildirmek isteyen herkes için erişilebilir olur.

En iyi uygulamalar

  • Bağlantılar kullanın: Değişme olasılığı yüksek bilgiler (örn. iletişim bilgileri) için, bunları sözleşmeye doğrudan kodlamak yerine bir web sayfasına bağlantı vermeniz önerilir. Bu, sık program güncellemelerine olan ihtiyacı ortadan kaldırır.

  • Doğrulama: Dağıtmadan önce, hem zincir üzerindeki programları hem de yerel ikili dosyaları doğrulayabilen query-security-txt aracını kullanarak format 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, Solana Explorer'da security.txt'in nasıl göründüğüne dair bir örnektir

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

Is this page helpful?