Dokumentasi SolanaMengembangkan Program

Memverifikasi Program

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:

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

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 name bukan nama package!

Seperti ini:

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"

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 build atau cargo build-sbf karena 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-repo Anda perlu menambahkan flag --mount-path. Ini akan menjadi path ke folder yang berisi Cargo.toml yang 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

Setelah Anda mengunggah PDA verifikasi onchain dengan verify-from-repo, kirimkan pekerjaan verifikasi jarak jauh ke OtterSec API:

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

--uploader adalah alamat yang mengunggah PDA verifikasi, biasanya otoritas upgrade program Anda. Jika program Anda dikendalikan oleh multisig, lanjutkan ke bagian verifikasi multisig dalam panduan ini di bawah.

Flag lama --remote pada verify-from-repo telah dihapus. Unggah PDA Anda terlebih dahulu, lalu jalankan remote submit-job.

Ini mengirimkan pekerjaan ke OtterSec API. Anda dapat memeriksa status pekerjaan dengan:

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

Setelah verifikasi berhasil diselesaikan, yang mungkin membutuhkan beberapa waktu, Anda akan dapat melihat program Anda sebagai terverifikasi di OtterSec API untuk program tunggal dan di Solana Explorer, SolanaFM, SolScan dan pada akhirnya juga di situs web yang dijalankan oleh komunitas SolanaVerify.org yang dipelihara oleh 0xDeep dan OtterSec verified programs API serta pada akhirnya di Verified Programs Dune Dashboard 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 dalam sebuah PDA yang ditandatangani oleh otoritas program. Jika program Anda dikendalikan oleh multisig, Anda dapat mengekspor transaksi tulis PDA ini dan mengirimkannya melalui Squads Protocol atau solusi multisig lain pilihan Anda.

1. Build program yang dapat diverifikasi

Pertama, build program tersebut:

solana-verify build

Ini akan membuat build yang dapat diverifikasi 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 much
solana program deploy target/deploy/verify_squads.so

Untuk sisa panduan multisig ini, kami akan menggunakan contoh ID program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD.

3. Commit dan verifikasi terhadap repositori

Setelah selesai, kita commit proyek ke GitHub. Berikut contohnya: https://github.com/solana-developers/verify-squads

Opsional: Coba verifikasi secara lokal terlebih dahulu (perintah ini menggunakan contoh ID program 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 ke multisig, salin otoritas multisig tersebut. Anda akan membutuhkannya di langkah berikutnya.

5. Ekspor transaksi PDA

Ketika otoritas program Anda tersedia secara lokal, Anda akan diminta untuk mengunggah data build ke onchain saat menggunakan perintah solana-verify verify-from-repo.

Karena Anda tidak dapat melakukan itu saat menggunakan multisig, Anda perlu mengekspor transaksi PDA secara manual dan kemudian memicu transaksi tersebut 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 base58. Jika Anda menginginkan transaksi yang diencode dalam base64 untuk digunakan di transaction inspector, Anda dapat menggunakan --encoding base64.

P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D

6. Kirim transaksi melalui Squads

Buka transaction builder Squads dan impor transaksi yang diencode dalam base58. Pastikan bahwa dalam simulasi, transaksi hanya memiliki panggilan ke program verifikasi osec dan program computer budget, dan tidak ada yang lain!

7. Kirim pekerjaan verifikasi jarak jauh

Setelah transaksi ke Squads berhasil, Anda dapat mengirimkan pekerjaan jarak jauh:

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

Selesai! Anda telah memverifikasi program Anda terhadap repositori publik dan mengirimkan pekerjaan jarak jauh ke API OtterSec. Sekarang Anda seharusnya dapat melihatnya tercermin di solana explorer dan tempat lainnya.

8. Memperbarui Program (Opsional)

Ketika Anda memperbarui program, Anda perlu mengekspor transaksi PDA baru dan mengirimkannya kembali melalui Squads.

Melakukan pembaruan pada program:

solana-verify build
solana 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 kembali transaksi upgrade PDA:

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

Kirimkan transaksi melalui Squads kembali.

Anda dapat melihat contoh transaksi di sini.

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

Selamat, Anda telah memverifikasi program Anda setelah upgrade multisig!

Verifikasi dari Docker Image

Anda juga dapat memverifikasi program Anda terhadap docker image dengan menjalankan perintah berikut:

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

Perintah ini memuat image yang tersimpan di ellipsislabs/hello_world_verifiable_build:latest, dan memverifikasi bahwa hash dari jalur executable di dalam container sama dengan hash program onchain yang diberikan ke perintah tersebut. Karena build sudah diunggah ke sebuah image, tidak diperlukan 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 ID
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:
"examples/hello_world/target/deploy/hello_world.so"
Executable hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executable
matches onchain program data ✅

Contoh build yang telah diverifikasi

Berikut adalah contoh verifikasi program 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 pengerjaan pada repositori dengan menggunakan parameter commit-hash: --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Saat diminta, jawab ya untuk mengunggah PDA verifikasi Anda ke onchain. Kemudian kirimkan pekerjaan verifikasi jarak jauh ke OtterSec API:

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

Program populer yang sudah diverifikasi

Phoenix

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

Output Akhir:

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

Squads V3

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

Perlu diperhatikan bahwa kami perlu menentukan library-name karena repositori Squads mencakup beberapa program. Kami menggunakan flag --bpf karena squads_mpl sebelumnya diverifikasi dengan Anchor.

Output Akhir:

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

Drift V2

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

Output Akhir:

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

Marginfi V2

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

Output Akhir:

Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Onchain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program 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 peningkatan program dengan menjalankan solana program show YourProgramId
  • Tidak ada PDA onchain: Jalankan solana-verify verify-from-repo -um dan pilih YA saat diminta. Tanpa mengunggah PDA, API tidak dapat mengambil metadata verifikasi Anda.
  • Data PDA tidak cocok: Perbarui PDA Anda jika Anda telah melakukan deploy ulang program. Data PDA Anda harus sesuai dengan program yang di-deploy.
  • Hash commit salah: Buat PDA Anda menggunakan hash commit yang tepat saat Anda melakukan deploy
  • Perbedaan lingkungan build: Gunakan Docker dengan solana-verify saat membuat PDA Anda

Hash build lokal saya tidak cocok dengan hash onchain. Mengapa?

Ini biasanya disebabkan oleh:

  • Anda menggunakan versi toolchain Rust/Solana yang berbeda
  • Dependensi Anda diperbarui di antara proses build
  • Anda tidak melakukan build di dalam container Docker
  • Anda melakukan checkout pada commit yang salah

Perbaiki ini dengan melakukan build menggunakan solana-verify build di Docker menggunakan commit yang tepat saat Anda melakukan deploy.

Berapa lama verifikasi saya akan berlangsung?

Perkirakan durasi berikut berdasarkan ukuran program Anda:

  • Program sederhana: 1–5 menit
  • Program kompleks: 5–15 menit
  • Program sangat besar: Hingga 30 menit

Pantau progres Anda menggunakan endpoint status pekerjaan.

Program saya bersifat immutable (tidak ada otoritas peningkatan). Bagaimana cara memverifikasinya?

Jika program Anda tidak memiliki otoritas peningkatan atau dijadikan immutable sebelum Anda sempat membuat PDA, kami memiliki alamat yang masuk daftar putih untuk situasi ini. Hubungi kami di contact@osec.io, dan kami akan membantu Anda mendapatkan verifikasi program.

Apa itu PDA dan mengapa penting?

PDA (Program Derived Account) Anda memungkinkan verifikasi tanpa kepercayaan:

  • Penyimpanan On-Chain: Simpan metadata verifikasi Anda (URL repo, hash commit, parameter build) secara onchain dalam PDA yang dimiliki oleh program Otter Verify (verifycLy8mB96wd9wqq3WDXQwM4oU6r42Th37Db9fC)
  • Tautan Kriptografis: PDA Anda diturunkan dari alamat program Anda, menciptakan tautan permanen 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 berfungsi dengan PDA onchain karena:

  • Tanpa Kepercayaan: API menolak data sembarang - API hanya menggunakan apa yang disimpan otoritas upgrade Anda secara onchain
  • Lebih Sederhana: Cukup berikan signer + program_id; API mengambil semua informasi lainnya dari PDA Anda
  • Tahan Perusakan: PDA Anda menciptakan catatan permanen yang dapat diverifikasi siapa pun secara independen
  • Bukti Kepemilikan: Signer Anda harus menjadi otoritas upgrade, membuktikan secara kriptografis bahwa Anda mengendalikan program

Seberapa sering saya harus memverifikasi program saya?

Verifikasi program Anda:

  • Setelah setiap deployment atau upgrade
  • Saat Anda memperbarui repositori sumber Anda
  • Jangan khawatir tentang verifikasi ulang selain itu - API secara otomatis memverifikasi ulang semua program setiap 24 jam

Apa yang terjadi ketika saya mengupgrade program saya?

Ikuti langkah-langkah ini setelah melakukan upgrade:

  1. API mendeteksi upgrade Anda dan membatalkan verifikasi program Anda.
  2. Perbarui PDA Anda dengan metadata verifikasi baru:
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
  1. Kirimkan permintaan verifikasi baru menggunakan otoritas upgrade Anda
  2. API akan memverifikasi versi baru Anda terhadap PDA yang telah diperbarui

Penting: Selalu perbarui PDA Anda menggunakan otoritas upgrade Anda dengan hash commit baru untuk program yang diupgrade.

Dapatkah saya mempercayai hasil verifikasi?

Ya - sistem ini dirancang untuk bersifat trustless dan dapat diverifikasi secara independen:

Yang Membuatnya Terpercaya:

  • PDA On-Chain: Metadata verifikasi Anda tersimpan di onchain, tidak dikendalikan 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-verify secara lokal
  • Re-verifikasi Berkelanjutan: API secara otomatis melakukan re-verifikasi semua program setiap 24 jam

Pahami Keterbatasan Ini:

  • Verifikasi mengonfirmasi bahwa sumber cocok dengan deployment - BUKAN bahwa kode Anda aman
  • Selalu tinjau kode sebelum berinteraksi dengan program
  • Terverifikasi ≠ diaudit, atau aman
  • Periksa repositori dan commit di PDA untuk memastikan berasal dari sumber terpercaya

Bagaimana cara memverifikasi program secara independen?

Verifikasi program apa pun sendiri dengan membaca PDA onchain-nya dan menjalankan verifikasi secara lokal:

Langkah 1: Baca PDA On-Chain

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

Langkah 2: Verifikasi Secara Lokal

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

Ini membuktikan:

  1. Metadata PDA adalah autentik (tersimpan di onchain)
  2. Kode sumber di repositori PDA cocok dengan program yang di-deploy
  3. Anda tidak perlu mempercayai API - verifikasi semuanya sendiri secara onchain

Bisakah orang lain memverifikasi program saya tanpa izin?

Ya, itulah alasan mengapa kami mewajibkan penanda tangan adalah upgrade authority. Kami hanya menganggap verifikasi sah jika penanda tangan adalah upgrade authority.

Apa yang saya butuhkan untuk membuat verifiable build?

Instal alat-alat berikut:

  • Docker (untuk build deterministik)
  • Cargo (manajer paket Rust)
  • Solana Verify CLI: cargo install solana-verify
  • Repositori Git publik dengan kode sumber Anda

Apakah saya bisa memverifikasi repositori privat?

Tidak - verifikasi memerlukan kode sumber yang bersifat publik:

  • PDA Anda menyimpan URL repositori publik yang dapat diakses oleh 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 mandiri bahwa kode sumber sesuai dengan deployment

Repositori privat merusak model kepercayaan inti sistem verifikasi.

Bagaimana cara memverifikasi program yang dikendalikan oleh Squads Multisig?

Ikuti langkah-langkah berikut untuk program yang dikendalikan multisig:

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

Penting: Selalu verifikasi secara lokal (langkah 2) untuk memastikan hash build sesuai sebelum mengekspor transaksi PDA.

Kesimpulan

Menggunakan verified builds di Solana memastikan integritas dan keterpercayaan 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 mempertahankan build yang dapat diverifikasi dan aman sesuai 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 ampuh untuk memastikan integritas program Solana Anda, pengaturan default-nya tidak sepenuhnya bersifat trustless. Image Docker dibuat dan dihosting oleh Solana Foundation.

Perlu diketahui bahwa Anda membangun proyek 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 membuat image Docker sendiri dan menghosting-nya di infrastruktur Anda sendiri. Dengan cara ini Anda dapat memastikan bahwa image Docker tidak dimanipulasi. Anda dapat menemukan skrip untuk membuat image Docker Anda sendiri di repositori Verified builds dan Anda dapat melakukan fork serta menjalankan github actions sendiri atau memvalidasi bahwa semuanya benar.

Selain itu, untuk verifikasi jarak jauh, Anda mempercayai OtterSec API dan Solana Explorer hingga tingkat tertentu.

API atau Solana Explorer berpotensi menampilkan informasi yang tidak benar jika telah dikompromikan.

Jika Anda ingin memiliki pengaturan yang sepenuhnya tanpa kepercayaan (trustless), Anda dapat menjalankan Verify API sendiri atau menjalankan verifikasi program secara lokal menggunakan perintah verify-from-repo dengan menggunakan data verifikasi on-chain yang tersimpan dalam PDA yang diturunkan dari otoritas deploy program dan verify program.

Verify program di-deploy oleh tim OtterSec dan belum dibekukan sehingga dapat ditingkatkan kapan saja.

Solana Foundation, OtterSec, dan tim Ellipsis Labs tidak bertanggung jawab atas kerugian atau kerusakan apa pun 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 pubkey verifier untuk akses mudah ke data verifikasi yang tersimpan dalam verification PDA. PDA yang memuat semua informasi yang diperlukan untuk membangun dan memverifikasi program diturunkan dari alamat program dan pubkey verifier. Secara default, ini adalah pubkey yang sama yang membangun dan men-deploy program. Namun dapat juga berupa pubkey lain yang dapat ditentukan dalam security.txt.

Fitur security.txt memungkinkan pengembang untuk menyematkan informasi kontak dan keamanan langsung di dalam smart contract Solana mereka. Terinspirasi oleh securitytxt.org, pendekatan ini menyediakan cara yang terstandarisasi bagi peneliti keamanan untuk menghubungi pemelihara proyek, meskipun mereka hanya mengetahui alamat kontrak.

Mengapa menggunakan security.txt?

Untuk banyak proyek, terutama yang lebih kecil atau bersifat privat, mengidentifikasi pengembang hanya dari alamat kontrak bisa sulit dan memakan waktu. Menyematkan file security.txt dalam program memastikan bahwa peneliti keamanan dapat dengan mudah menghubungi orang yang tepat, sehingga 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:

Cargo.toml
[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 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!"
}

Setelah informasi security.txt disematkan dalam program Anda, informasi tersebut dapat dengan mudah dikueri melalui alat seperti Solana Explorer, memastikan bahwa detail kontak dan keamanan Anda tersedia bagi siapa saja yang ingin melaporkan potensi masalah.

Praktik terbaik

  • Gunakan Tautan: Untuk informasi yang kemungkinan akan berubah (misalnya, detail kontak), disarankan untuk menautkan ke halaman web daripada meng-hardcode-nya ke dalam kontrak. Ini menghindari kebutuhan untuk sering melakukan pembaruan program.

  • 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 para peneliti untuk menghubungi Anda, mendorong keamanan yang lebih baik dan komunikasi yang lebih efektif 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 telah diverifikasi di verify.osec.io.

Is this page helpful?

Daftar Isi

Apa itu build terverifikasi?Bagaimana cara kerjanya?Mengapa saya harus menggunakan verified builds?Bagaimana cara membuat build terverifikasi?Instal Docker dan CargoInstal Solana Verify CLIPersiapkan proyekMembangun Program yang Dapat DiverifikasiMenerapkan Program yang Dapat DiverifikasiMemverifikasi terhadap repositoriVerifikasi melalui API publikCara Memverifikasi Program Anda Ketika Dikendalikan oleh Multisig seperti Squads1. Build program yang dapat diverifikasi2. Deploy program3. Commit dan verifikasi terhadap repositori4. Transfer otoritas program ke multisig5. Ekspor transaksi PDA6. Kirim transaksi melalui Squads7. Kirim pekerjaan verifikasi jarak jauh8. Memperbarui Program (Opsional)9. Ekspor dan Kirim Transaksi PDA BaruVerifikasi dari Docker ImageContoh build yang telah diverifikasiProgram populer yang sudah diverifikasiPhoenixSquads V3Drift V2Marginfi V2Pertanyaan yang sering diajukanVerifikasi saya gagal. Apa yang harus saya lakukan?Hash build lokal saya tidak cocok dengan hash onchain. Mengapa?Berapa lama verifikasi saya akan berlangsung?Program saya bersifat immutable (tidak ada otoritas peningkatan). Bagaimana cara memverifikasinya?Apa itu PDA dan mengapa penting?Mengapa saya harus membuat PDA sebelum menggunakan API?Seberapa sering saya harus memverifikasi program saya?Apa yang terjadi ketika saya mengupgrade program saya?Dapatkah saya mempercayai hasil verifikasi?Bagaimana cara memverifikasi program secara independen?Bisakah orang lain memverifikasi program saya tanpa izin?Apa yang saya butuhkan untuk membuat verifiable build?Apakah saya bisa memverifikasi repositori privat?Bagaimana cara memverifikasi program yang dikendalikan oleh Squads Multisig?KesimpulanKeamanan + PenafianSecurity.txt untuk program SolanaMengapa menggunakan security.txt?Cara mengimplementasikan security.txtPraktik terbaik
Edit Halaman
© 2026 Yayasan Solana. Semua hak dilindungi.