Panduan ini dimaksudkan sebagai referensi bagi pengembang yang ingin mengimplementasikan build terverifikasi untuk program mereka di Solana. Kami akan membahas apa itu build terverifikasi, cara menggunakannya, pertimbangan khusus, dan praktik terbaik untuk memastikan keaslian program Anda di blockchain.
Apa itu build terverifikasi?
Build terverifikasi memastikan bahwa program yang dapat dieksekusi yang Anda deploy ke jaringan Solana sesuai dengan kode sumber di repositori Anda. Dengan melakukan ini, pengembang dan pengguna dapat yakin bahwa program yang berjalan di blockchain sesuai persis dengan basis kode publik, mempromosikan transparansi dan keamanan.
Proses verifikasi melibatkan perbandingan hash program di blockchain dengan hash program yang dibangun secara lokal dari kode sumber. Ini memastikan tidak ada perbedaan antara kedua versi tersebut.
Meskipun build terverifikasi tidak boleh dianggap lebih aman daripada build yang tidak terverifikasi, build ini memungkinkan pengembang untuk memverifikasi sendiri bahwa kode sumber sesuai dengan apa yang di-deploy di blockchain. Dengan menggunakan kode sumber, pengembang kemudian dapat memvalidasi apa yang dieksekusi oleh kode saat mengirim transaksi.
Pipeline build terverifikasi dirancang dan dikelola oleh Ellipsis Labs dan OtterSec. Untuk detail lebih lanjut, ikuti panduan di repositori build terverifikasi asli serta proses verifikasi build langsung ke dalam rangkaian alat Anza, setelah didukung di sana.
Bagaimana cara kerjanya?
Proses verifikasi dilakukan dengan membandingkan hash program onchain dengan hash program yang dibangun secara lokal dari kode sumber. Anda membangun program Anda dalam lingkungan terkontrol menggunakan Solana Verify CLI dan Docker. Ini memastikan bahwa proses pembangunan bersifat deterministik dan konsisten di berbagai sistem yang berbeda. Setelah Anda memiliki executable, Anda dapat men-deploy-nya ke jaringan Solana. Selama proses pembangunan, sebuah PDA dari program verify akan dibuat. PDA ini berisi semua data yang diperlukan untuk memverifikasi program. PDA tersebut berisi alamat program, url git, commit hash, dan argumen yang digunakan untuk membangun program.
Dengan menggunakan data dalam PDA, semua orang dapat menjalankan perintah program verify secara lokal dan memeriksa apakah program tersebut dibangun dari kode sumber yang disediakan. Kemudian semua orang dapat memverifikasi sendiri secara sepenuhnya tanpa kepercayaan atau dapat menjalankan API verify mereka sendiri yang dikelola oleh OtterSec untuk menyediakan titik akses yang mudah bagi pengguna untuk memeriksa verifikasi. Anda sudah dapat melihat panggilan API ini digunakan di Solana Explorer dan SolanaFM, di antara tempat-tempat lainnya.
Mengapa saya harus menggunakan verified builds?
Menggunakan verified builds memberikan manfaat berikut:
-
Keamanan: Menjamin bahwa program yang berjalan onchain cocok dengan kode sumber, mencegah perubahan berbahaya.
-
Transparansi: Memungkinkan pengguna dan pengembang lain untuk memvalidasi bahwa program onchain dapat dipercaya dengan membandingkannya dengan codebase publik.
-
Kepercayaan: Meningkatkan kepercayaan pengguna, karena verified builds menunjukkan bahwa perilaku onchain program Anda selaras dengan kode publik Anda. Ketika membangun program yang dapat diverifikasi, Anda meminimalkan risiko yang terkait dengan menjalankan kode yang tidak sah atau berbahaya. Ini juga memastikan Anda mematuhi praktik terbaik dan memberikan cara yang mudah bagi peneliti keamanan untuk menghubungi Anda. Selain itu, dompet dan alat lainnya dapat mengizinkan transaksi dari program Anda dengan lebih mudah selama program tersebut terverifikasi.
-
Kemudahan penemuan: Ketika Anda menyediakan build terverifikasi dari program Anda, semua orang dapat menemukan kode sumber, dokumentasi, SDK program atau IDL Anda dan mereka juga dapat dengan mudah menghubungi Anda melalui github jika ada masalah.
Bagaimana cara membuat build terverifikasi?
Untuk membuat build terverifikasi, Anda perlu mengikuti langkah-langkah berikut:
Ringkasan:
- Commit kode Anda ke repositori publik
- Buat build terverifikasi di docker
- Deploy build terverifikasi
- Verifikasi program yang di-deploy terhadap API publik
Jika Anda memverifikasi program Anda yang tidak dibangun dalam container docker, kemungkinan besar akan gagal karena build program Solana tidak deterministik di berbagai sistem yang berbeda.
Instal Docker dan Cargo
Instal alat-alat yang diperlukan, pastikan Anda memiliki Docker dan Cargo terinstal. Docker menyediakan lingkungan build yang terkontrol untuk memastikan konsistensi, dan Cargo digunakan untuk mengelola paket Rust.
- Docker: Ikuti langkah-langkah di situs web Docker untuk menginstal Docker untuk platform Anda. Setelah terinstal, pastikan layanan Docker berjalan dengan mengikuti panduan ini lebih lanjut.
- Cargo: Jika Anda belum memiliki Cargo terinstal, Anda dapat menginstalnya dengan menjalankan perintah berikut:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Instal Solana Verify CLI
Solana Verify CLI adalah alat utama yang digunakan untuk memverifikasi build. Solana Verify CLI saat ini dikelola oleh Ellipsis Labs dan dapat diinstal menggunakan Cargo.
Anda dapat menginstalnya dengan menjalankan:
cargo install solana-verify
Jika Anda membutuhkan versi CLI tertentu, Anda dapat menetapkan versinya dengan:
cargo install solana-verify --version $VERSION
Jika diinginkan, Anda dapat menginstal versi langsung dari commit tertentu:
cargo install solana-verify --git https://github.com/Ellipsis-Labs/solana-verifiable-build --rev 13a1db2
Persiapkan proyek
Untuk memverifikasi terhadap repositori, repositori tersebut harus memiliki file
Cargo.lock di direktori root repositori Anda. Jika Anda hanya memiliki satu
program dalam repositori Anda dan file cargo.lock di root Anda, Anda dapat
langsung melanjutkan ke langkah berikutnya dan membangun program Anda.
Jika program Anda berada di subfolder dan Anda memiliki workspace rust, Anda
perlu membuat file workspace Cargo.toml di direktori root repositori Anda.
Anda dapat menggunakan contoh Cargo.toml ini sebagai preset:
[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
Pastikan bahwa program Anda berada dalam array workspace/members dan bahwa
Cargo.toml program Anda memiliki nama lib yang dikonfigurasi dengan benar.
Yang penting adalah
lib namebukan nama package!
Seperti ini:
[package]name = "waffle"version = "0.1.0"edition = "2021"[lib]name = "waffle"crate-type = ["cdylib", "lib"][dependencies]solana-program = "2.1.0"
Dalam repositori ini
Anda dapat melihat contoh workspace dengan program di subfolder. Perhatikan juga
bahwa ketika program berada di subfolder, Anda nantinya perlu menambahkan folder
ini sebagai --mount-path ke perintah verify-from-repo.
Dalam repositori ini Anda dapat menemukan contoh Anchor. Dalam repositori ini Anda dapat menemukan contoh rust native.
Dengan file Cargo.toml ini, Anda kemudian dapat menjalankan
cargo generate-lockfile untuk membuat file lock dan melanjutkan ke pembangunan
program Anda.
Membangun Program yang Dapat Diverifikasi
Untuk membangun program Solana Anda secara terverifikasi, navigasikan ke
direktori yang berisi file Cargo.toml workspace Anda dan jalankan:
solana-verify build
Ini akan menyalin lingkungan Anda ke dalam kontainer docker dan membangunnya dengan cara yang deterministik.
Pastikan bahwa Anda benar-benar men-deploy build yang terverifikasi dan tidak secara tidak sengaja menimpanya dengan
anchor buildataucargo build-sbfkarena ini kemungkinan besar tidak akan menghasilkan hash yang sama dan dengan demikian verifikasi Anda akan gagal.
Untuk proyek dengan beberapa program, Anda dapat membangun program tertentu dengan menggunakan nama pustaka (bukan nama paket):
solana-verify build --library-name $PROGRAM_LIB_NAME
Proses ini memastikan build yang deterministik dan dapat memakan waktu, terutama pada sistem tertentu (misalnya, MacBook M1) karena berjalan dalam container docker. Untuk build yang lebih cepat, disarankan menggunakan mesin Linux dengan arsitektur x86.
Setelah proses build selesai, Anda dapat mengambil hash dari executable menggunakan perintah berikut:
solana-verify get-executable-hash target/deploy/$PROGRAM_LIB_NAME.so
Menerapkan Program yang Dapat Diverifikasi
Setelah Anda membangun program dan mendapatkan hash-nya, Anda dapat menerapkannya ke jaringan Solana. Disarankan untuk menggunakan solusi multi-signature atau governance seperti Squads Protocol untuk penerapan yang aman, tetapi Anda juga dapat langsung menerapkan dengan:
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
Biaya prioritas rendah yang saat ini sesuai dapat Anda minta dari penyedia rpc Anda, misalnya Quicknode.
Untuk memverifikasi bahwa program yang diterapkan cocok dengan executable yang dibangun, jalankan:
solana-verify get-program-hash -u $NETWORK_URL $PROGRAM_ID
Anda mungkin memiliki versi berbeda yang diterapkan pada cluster Solana yang berbeda (yaitu devnet, testnet, mainnet). Pastikan Anda menggunakan URL jaringan yang benar untuk cluster Solana yang ingin Anda verifikasi programnya. Verifikasi jarak jauh hanya akan berfungsi di mainnet.
Memverifikasi terhadap repositori
Untuk memverifikasi program terhadap repositori publiknya, gunakan:
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
Saat Anda menjalankan build terverifikasi di direktori program Anda, ketika menjalankan
verify-from-repoAnda perlu menambahkan flag--mount-path. Ini akan menjadi path ke folder yang berisiCargo.tomlyang memuat nama library program Anda.
Perintah ini membandingkan hash program onchain dengan hash executable yang dibangun dari sumber pada hash commit yang ditentukan.
Di akhir perintah, Anda akan ditanya apakah Anda ingin mengunggah data verifikasi ke onchain. Jika Anda melakukannya, Solana Explorer akan segera menampilkan data verifikasi program Anda. Sampai diverifikasi oleh build jarak jauh, program akan ditampilkan sebagai belum terverifikasi. Pelajari cara memverifikasi program Anda melalui API publik di langkah berikutnya.
Jika Anda ingin mengunci verifikasi ke rilis tertentu, Anda dapat menambahkan
flag --commit-hash ke perintah tersebut.
Verifikasi melalui API publik
Akhirnya, Anda juga dapat langsung memverifikasi program melalui siapa pun yang menjalankan API verifikasi:
solana-verify verify-from-repo --remote -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
Disarankan untuk menggunakan URL RPC berbayar karena jika tidak Anda mungkin mengalami batasan rate dari RPC gratis. Jadi alih-alih
-umAnda sebaiknya menggunakan--url yourRpcUrluntuk verifikasi yang lebih andal.
Flag --remote mengirimkan permintaan build ke API OtterSec, yang memicu build
jarak jauh untuk program Anda. Setelah build selesai, sistem memverifikasi bahwa
hash onchain program Anda cocok dengan hash artefak build yang dihasilkan dari
repositori Anda.
Default-nya adalah API OtterSec.
Pastikan untuk memilih ya ketika Anda ditanya untuk mengunggah data verifikasi ke onchain. Ini digunakan oleh API untuk memverifikasi bahwa Anda telah mengunggah data verifikasi.
Anda juga dapat memicu pekerjaan jarak jauh secara manual dengan menggunakan:
solana-verify remote submit-job --program-id <program-id> --uploader <address>
Di mana uploader adalah alamat yang memiliki otoritas untuk menulis ke PDA. Itu seharusnya menjadi otoritas program dalam kebanyakan kasus. Jika program Anda dikendalikan oleh multisig, silakan lanjutkan di bagian verifikasi multisig dari panduan ini di bawah.
Ini akan mengirimkan tugas ke API OtterSec dan Anda kemudian dapat memverifikasi status tugas dengan:
solana-verify remote get-job-status --job-id <job-id>
Setelah verifikasi berhasil diselesaikan, yang mungkin memakan waktu, Anda akan dapat melihat program Anda sebagai terverifikasi di API OtterSec untuk program tunggal dan di Solana Explorer, SolanaFM, SolScan dan akhirnya juga di situs web yang dikelola komunitas SolanaVerify.org yang dikelola oleh 0xDeep dan API program terverifikasi OtterSec dan akhirnya di Dashboard Dune Program Terverifikasi yang berkontribusi pada ekosistem Solana yang lebih sehat.
Cara memverifikasi program Anda ketika dikendalikan oleh Multisig seperti Squads
Agar verifikasi jarak jauh berfungsi, Anda perlu menulis data verifikasi ke PDA yang ditandatangani oleh otoritas program. Jika program Anda dikendalikan oleh multisig, Anda dapat mengekspor transaksi penulisan PDA ini dan mengirimkannya melalui Squads Protocol atau solusi multisig lain pilihan Anda.
1. Membangun program yang dapat diverifikasi
Pertama bangun program:
solana-verify build
Ini akan membuat build terverifikasi menggunakan container docker dengan versi
solana yang ditentukan dalam file Cargo.lock.
2. Deploy program
solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too muchsolana program deploy target/deploy/verify_squads.so
Untuk sisa panduan multisig ini, kami akan menggunakan contoh program ID
6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD.
3. Commit dan verifikasi terhadap repositori
Setelah itu selesai, kita commit proyek ke github. Berikut adalah contohnya: https://github.com/solana-developers/verify-squads
Opsional: Lihat apakah Anda dapat memverifikasi secara lokal terlebih dahulu
(perintah ini menggunakan contoh program ID
6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD):
solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
Hanya untuk memastikan parameter Anda sudah benar.
4. Transfer otoritas program ke multisig
Jika Anda belum mentransfer otoritas program Anda ke multisig dan menyalin otoritas multisig. Anda membutuhkannya di langkah berikutnya.
5. Ekspor transaksi PDA
Ketika Anda memiliki otoritas program secara lokal, Anda akan diminta untuk
mengunggah data build onchain saat menggunakan perintah
solana-verify verify-from-repo.
Karena Anda tidak dapat melakukan itu ketika menggunakan multisig, Anda perlu mengekspor transaksi PDA secara manual dan kemudian memicu transaksi melalui Squads.
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
Ini akan mengembalikan transaksi dalam format base58. Jika Anda menginginkan
transaksi yang dikodekan dalam base64 untuk digunakan di transaction inspector,
Anda dapat menggunakan --encoding base64.
P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D
6. Kirim transaksi melalui Squads
Buka pembuat transaksi squads dan impor transaksi yang dikodekan base58. Pastikan bahwa dalam simulasi, transaksi hanya memiliki panggilan ke program verifikasi osec dan program anggaran komputer dan tidak ada yang lain!
7. Kirim tugas verifikasi jarak jauh
Setelah transaksi ke squads berhasil, Anda dapat mengirimkan tugas jarak jauh:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD--uploader <your program authority>
Itu saja! Anda telah memverifikasi program Anda terhadap repositori publik dan mengirimkan tugas jarak jauh ke API OtterSec. Anda seharusnya dapat melihatnya tercermin di explorer solana dan tempat lainnya sekarang.
8. Memperbarui program (Opsional)
Ketika Anda memperbarui program, Anda perlu mengekspor transaksi PDA baru dan mengirimkannya melalui Squads lagi.
Melakukan pembaruan pada program:
solana-verify buildsolana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50
Kemudian transfer otoritas buffer tersebut ke multisig atau langsung buat buffer dengan otoritas multisig.
solana program set-buffer-authority Fu3k79g53ZozAj47uq1tXrFy4QbQYh7y745DDsxjtyLR --new-buffer-authority 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
9. Ekspor dan kirim transaksi PDA baru
Jangan lupa untuk melakukan commit perubahan Anda ke github. Ekspor transaksi peningkatan PDA lagi:
solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
Kirim transaksi melalui Squads lagi.
Anda dapat melihat contoh transaksi di sini.
Kemudian kirim untuk build jarak jauh lainnya:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
Seharusnya menghasilkan sesuatu seperti ini:
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 on-chain 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
Selamat, Anda telah memverifikasi program Anda setelah peningkatan multisig!
Verifikasi dari image docker
Anda juga dapat memverifikasi program Anda menggunakan image docker dengan menjalankan perintah berikut:
solana-verify verify-from-image -eexamples/hello_world/target/deploy/hello_world.so -iellipsislabs/hello_world_verifiable_build:latest -p2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn
Perintah ini memuat image yang tersimpan di
ellipsislabs/hello_world_verifiable_build:latest, dan memverifikasi bahwa hash
dari path executable di dalam container sama dengan hash dari program on-chain
yang diberikan ke perintah tersebut. Karena build sudah diunggah ke sebuah
image, tidak perlu melakukan rebuild penuh dari executable yang dapat memakan
waktu lama.
Dockerfile yang membuat image ellipsislabs/hello_world_verifiable_build:latest
dapat ditemukan di repositori ellipsis labs
/examples/hello_world.
Berikut adalah output yang diharapkan:
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 on-chain program data ✅
Contoh build terverifikasi
Berikut adalah contoh memverifikasi program contoh dengan ID
FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv menggunakan kode sumber dari
repositori ini:
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
Secara default, perintah verify-from-repo mengambil commit terakhir pada
branch main. Anda juga dapat menentukan commit tertentu jika ingin melanjutkan
pekerjaan pada repositori dengan menggunakan parameter commit-hash:
--commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
Akhirnya, Anda juga dapat langsung memverifikasi program melalui API OtterSec:
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
Perintah --remote mengirimkan permintaan build ke API OtterSec, yang memicu
proses build jarak jauh untuk program Anda. Setelah proses build selesai, sistem
memverifikasi bahwa hash onchain dari program Anda cocok dengan hash dari
artifact build yang dihasilkan dari repositori Anda.
Program populer yang sudah terverifikasi
Phoenix
solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
Output akhir:
Executable Program Hash from repo: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9On-chain 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
Perhatikan bahwa kita perlu menentukan
library-namekarena repo Squads mencakup beberapa program. Kita menggunakan flag--bpfkarenasquads_mplsebelumnya telah diverifikasi dengan Anchor.
Output akhir:
Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cOn-chain 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
Output akhir:
Executable Program Hash from repo: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828On-chain 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
Output akhir:
Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Program hash matches ✅
Pertanyaan yang sering diajukan
Verifikasi saya gagal. Apa yang harus saya lakukan?
Periksa masalah umum berikut:
- Penanda tangan salah: Pastikan penanda tangan Anda adalah otoritas upgrade
program dengan menjalankan
solana program show YourProgramId - Tidak ada PDA on-chain: Jalankan
solana-verify verify-from-repo -umdan pilih YES saat diminta. Tanpa mengunggah PDA, API tidak dapat mengambil metadata verifikasi Anda. - Ketidakcocokan data PDA: Perbarui PDA Anda jika Anda telah mendeploy ulang program Anda. Data PDA Anda harus cocok dengan program yang telah dideploy.
- Hash commit salah: Buat PDA Anda menggunakan hash commit yang sama persis dengan yang Anda deploy
- Perbedaan lingkungan build: Gunakan Docker dengan solana-verify saat membuat PDA Anda
Hash build lokal saya tidak cocok dengan hash on-chain. Mengapa?
Ini biasanya berarti:
- Anda menggunakan versi toolchain Rust/Solana yang berbeda
- Dependensi Anda diperbarui di antara build
- Anda tidak melakukan build dalam container Docker
- Anda checkout commit yang salah
Perbaiki ini dengan melakukan build menggunakan solana-verify build di Docker
menggunakan commit yang sama persis dengan yang Anda deploy.
Berapa lama verifikasi saya akan memakan waktu?
Perkirakan jangka waktu berikut berdasarkan ukuran program Anda:
- Program sederhana: 1-5 menit
- Program kompleks: 5-15 menit
- Program sangat besar: Hingga 30 menit
Lacak progres Anda menggunakan endpoint status pekerjaan.
Program saya tidak dapat diubah (tidak ada otoritas upgrade). Bagaimana cara memverifikasinya?
Jika program Anda tidak memiliki otoritas upgrade atau dibuat tidak dapat diubah sebelum Anda dapat membuat PDA, kami memiliki alamat yang masuk daftar putih untuk situasi ini. Hubungi kami di contact@osec.io, dan kami akan membantu Anda memverifikasi program Anda.
Apa itu PDA dan mengapa itu penting?
PDA (Program Derived Account) Anda memungkinkan verifikasi tanpa kepercayaan:
- Penyimpanan On-Chain: Simpan metadata verifikasi Anda (URL repo, hash
commit, parameter build) secara on-chain dalam PDA yang dimiliki oleh program
Otter Verify (
verifycLy8mB96wd9wqq3WDXQwM4oU6r42Th37Db9fC) - Tautan Kriptografis: PDA Anda diturunkan dari alamat program Anda, menciptakan tautan yang tidak dapat diubah ke data verifikasi Anda
- Kepercayaan Terdesentralisasi: Siapa pun dapat membaca PDA Anda dan memverifikasi program Anda secara independen
Mengapa saya harus membuat PDA sebelum menggunakan API?
API hanya bekerja dengan PDA on-chain karena:
- Tanpa Kepercayaan: API menolak data sembarang - hanya menggunakan apa yang disimpan oleh upgrade authority Anda secara on-chain
- Lebih Sederhana: Cukup berikan signer + program_id; API mendapatkan semua hal lainnya dari PDA Anda
- Anti-Manipulasi: PDA Anda menciptakan catatan yang tidak dapat diubah dan dapat diverifikasi oleh siapa saja secara independen
- Bukti Kepemilikan: Signer Anda harus menjadi upgrade authority, secara kriptografis membuktikan bahwa Anda mengendalikan program tersebut
Seberapa sering saya harus memverifikasi program saya?
Verifikasi program Anda:
- Setelah setiap deployment atau upgrade
- Ketika Anda memperbarui repositori sumber Anda
- Jangan khawatir untuk memverifikasi ulang selain itu - API secara otomatis memverifikasi ulang semua program setiap 24 jam
Apa yang terjadi ketika saya meng-upgrade program saya?
Ikuti langkah-langkah berikut setelah meng-upgrade:
- API mendeteksi upgrade Anda dan membatalkan verifikasi program Anda.
- Perbarui PDA Anda dengan metadata verifikasi baru:
solana-verify verify-from-repo -um \--program-id YourProgramId... \https://github.com/your-org/your-program
- Kirim permintaan verifikasi baru menggunakan upgrade authority Anda
- API akan memverifikasi versi baru Anda terhadap PDA yang telah diperbarui
Penting: Selalu perbarui PDA Anda menggunakan upgrade authority Anda dengan hash commit baru untuk program yang telah di-upgrade.
Bisakah saya mempercayai hasil verifikasi?
Ya - sistem dirancang untuk trustless dan dapat diverifikasi secara independen:
Yang Membuatnya Dapat Dipercaya:
- PDA On-Chain: Metadata verifikasi Anda tersimpan on-chain, tidak dikontrol oleh otoritas pusat mana pun
- Bukti Upgrade Authority: Hanya upgrade authority program Anda yang dapat membuat/memperbarui PDA
- Verifikasi Independen: Siapa pun dapat memverifikasi dengan membaca PDA
Anda dan menjalankan
solana-verifysecara lokal - Verifikasi Ulang Berkelanjutan: API secara otomatis memverifikasi ulang semua program setiap 24 jam
Pahami Batasan Ini:
- Verifikasi mengonfirmasi source code cocok dengan deployment - BUKAN bahwa kode Anda aman
- Selalu tinjau kode sebelum berinteraksi dengan program
- Terverifikasi ≠ teraudit, atau aman
- Periksa repositori dan commit dalam PDA untuk mengonfirmasi bahwa itu berasal dari sumber terpercaya
Bagaimana cara memverifikasi program secara independen?
Verifikasi program apa pun sendiri dengan membaca PDA on-chain-nya dan menjalankan verifikasi secara lokal:
Langkah 1: Baca PDA On-Chain
# Install solana-verify if you haven'tcargo install solana-verify# Get the PDA datasolana-verify list-program-pdas --program-id YourProgramId...
Langkah 2: Verifikasi Secara Lokal
# 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 on-chain program hash
Ini membuktikan:
- Metadata PDA asli (tersimpan on-chain)
- Source code dalam repositori PDA cocok dengan program yang di-deploy
- Anda tidak perlu mempercayai API - verifikasi semuanya sendiri on-chain
Bisakah orang lain memverifikasi program saya tanpa izin?
Ya, itulah alasan mengapa kami memerlukan signer menjadi upgrade authority. Kami hanya menganggap verifikasi valid jika signer adalah upgrade authority.
Apa yang saya perlukan untuk membuat verifiable builds?
Instal tools berikut:
- Docker (untuk deterministic builds)
- Cargo (Rust package manager)
- Solana Verify CLI:
cargo install solana-verify - Repositori Git publik dengan source code Anda
Bisakah saya memverifikasi repositori privat?
Tidak - verifikasi memerlukan kode sumber publik:
- PDA Anda menyimpan URL repositori publik yang dapat diakses siapa saja
- Verifikasi tanpa kepercayaan bergantung pada akses kode publik
- Pengguna perlu membaca kode sumber Anda untuk memahami apa yang dilakukan program Anda
- Tujuan utamanya adalah memungkinkan pengguna memverifikasi secara independen bahwa sumber sesuai dengan deployment
Repositori privat merusak model kepercayaan inti sistem verifikasi.
Bagaimana cara memverifikasi program yang dikontrol oleh Squads Multisig?
Ikuti langkah-langkah berikut untuk program yang dikontrol multisig:
# 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...
Penting: Selalu verifikasi secara lokal (langkah 2) untuk mengonfirmasi bahwa hash build cocok sebelum mengekspor transaksi PDA.
Kesimpulan
Menggunakan verified builds di Solana memastikan integritas dan kepercayaan program Anda di jaringan serta memungkinkan developer menemukan SDK Anda langsung dari Solana Explorer. Dengan memanfaatkan alat seperti Solana Verify CLI dan Docker, Anda dapat memelihara build yang dapat diverifikasi dan aman yang selaras dengan kode sumber Anda. Selalu ambil tindakan pencegahan yang diperlukan untuk menggunakan lingkungan yang konsisten, dan pertimbangkan solusi tata kelola untuk upgrade dan deployment yang aman.
Keamanan + Penafian
Meskipun verified builds adalah alat yang powerful untuk memastikan integritas program Solana Anda, ini tidak sepenuhnya trustless dalam pengaturan default. Image docker dibangun dan dihosting oleh Solana Foundation.
Perhatikan bahwa Anda membangun proyek Anda dalam image docker yang diunduh dan bahwa seluruh pengaturan Anda disalin ke dalam image docker tersebut untuk proses build termasuk informasi yang berpotensi sensitif.
Jika Anda ingin memiliki pengaturan yang sepenuhnya trustless, Anda dapat membangun image docker sendiri dan meng-host-nya di infrastruktur Anda sendiri. Dengan cara ini Anda dapat memastikan bahwa image docker tidak dirusak. Anda dapat menemukan skrip untuk membuat image docker Anda sendiri di repositori Verified builds dan Anda dapat melakukan fork dan menjalankan github actions sendiri atau memvalidasi bahwa mereka benar.
Selain itu, untuk verifikasi jarak jauh, Anda mempercayai API OtterSec dan Solana Explorer sampai tingkat tertentu.
API atau Solana Explorer berpotensi menampilkan informasi yang salah jika disusupi.
Jika Anda ingin memiliki pengaturan yang sepenuhnya trustless, Anda dapat
menjalankan
Verify API sendiri
atau menjalankan verifikasi program secara lokal sendiri menggunakan perintah
verify-from-repo dengan menggunakan data verifikasi on-chain yang disimpan di
PDA
yang diturunkan dari deploy authority program dan
verify program.
Verify program di-deploy oleh tim OtterSec dan belum dibekukan sehingga dapat diupgrade kapan saja.
Solana Foundation, OtterSec, dan tim Ellipsis Labs tidak bertanggung jawab atas kerugian atau kerusakan yang mungkin terjadi akibat penggunaan pipeline verified builds.
Security.txt untuk program Solana
Selain verified builds, Anda juga dapat menambahkan file security.txt ke
program Anda. Di masa mendatang, setelah diimplementasikan, security.txt akan
menyimpan public key verifier untuk akses mudah ke data verifikasi yang
tersimpan dalam PDA verifikasi. PDA yang berisi semua informasi yang diperlukan
untuk membangun dan memverifikasi program diturunkan dari alamat program dan
verifier pubkey. Secara default, ini adalah pubkey yang sama yang membangun dan
men-deploy program. Tetapi juga dapat berupa pubkey lain yang dapat ditentukan
dalam security.txt.
Fitur security.txt memungkinkan developer untuk menyematkan informasi kontak
dan keamanan langsung di dalam smart contract Solana mereka. Terinspirasi oleh
securitytxt.org, pendekatan ini menyediakan cara
standar bagi peneliti keamanan untuk menghubungi pengelola proyek, meskipun
mereka hanya mengetahui alamat kontraknya.
Mengapa menggunakan security.txt?
Untuk banyak proyek, terutama yang lebih kecil atau bersifat pribadi,
mengidentifikasi pengembang hanya dari alamat kontrak bisa menjadi sulit dan
memakan waktu. Menyematkan file security.txt di dalam program memastikan bahwa
peneliti keamanan dapat dengan mudah menghubungi orang yang tepat, berpotensi
mencegah eksploitasi dan memastikan laporan bug yang tepat waktu.
Cara mengimplementasikan security.txt
Untuk menambahkan security.txt ke program Solana Anda, ikuti langkah-langkah
berikut:
Tambahkan dependensi solana-security-txt ke Cargo.toml Anda:
[dependencies]solana-security-txt = "1.1.1"
Gunakan makro security_txt! dalam kontrak Anda untuk mendefinisikan informasi
keamanan Anda. Anda dapat menyertakan detail kontak, URL proyek, dan bahkan
kebijakan keamanan. Berikut contohnya:
#[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!"}
Setelah informasi security.txt disematkan dalam program Anda, informasi
tersebut dapat dengan mudah ditanyakan melalui alat seperti Solana Explorer,
memastikan bahwa kontak dan detail keamanan Anda tersedia bagi siapa pun yang
ingin melaporkan masalah potensial.
Praktik terbaik
-
Gunakan Tautan: Untuk informasi yang kemungkinan berubah (misalnya, detail kontak), disarankan untuk menautkan ke halaman web daripada mengkodekannya secara langsung ke dalam kontrak. Ini menghindari kebutuhan untuk upgrade program yang sering.
-
Verifikasi: Sebelum melakukan deployment, verifikasi format dan konten menggunakan alat
query-security-txt, yang dapat memvalidasi program onchain maupun biner lokal:
query-security-txt target/bpfel-unknown-unknown/release/my_contract.so
Dengan menyematkan informasi kontak keamanan langsung ke dalam kontrak Anda, Anda memudahkan peneliti untuk menghubungi Anda, mendorong keamanan dan komunikasi yang lebih baik dalam ekosistem Solana.
Ini adalah contoh tampilan security.txt di Solana Explorer
Proyek security.txt dikelola oleh
Neodyme Labs
Anda dapat memeriksa status verifikasi dan menelusuri program yang terverifikasi di verify.osec.io.
Is this page helpful?