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. Jika Anda hanya memiliki satu program dalam
repositori Anda dan file cargo.lock
di root, 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 Cargo.toml
workspace 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 program Anda berada dalam array workspace/members
dan Cargo.toml
program Anda memiliki nama lib
yang dikonfigurasi dengan benar.
Yang penting adalah
lib name
bukan nama paket!
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, nantinya Anda 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 di tempatnya, 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
ataucargo build-sbf
karena ini kemungkinan besar tidak akan menghasilkan hash yang sama dan 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 jalur ke folder yang berisiCargo.toml
yang berisi nama pustaka 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 RPC Url berbayar karena jika tidak, Anda mungkin mengalami batasan rate dari RPC gratis. Jadi alih-alih menggunakan
-um
Anda sebaiknya menggunakan--url yourRpcUrl
untuk 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 membangun 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 muchsolana program deploy target/deploy/verify_squads.so
Untuk sisa panduan multisig ini, kita akan menggunakan contoh ID program
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 ke blockchain 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 base58. Jika Anda menginginkan transaksi yang
dikodekan base64 untuk digunakan dalam inspector transaksi, 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 disimpan di
ellipsislabs/hello_world_verifiable_build:latest
, dan memverifikasi bahwa hash
dari jalur executable dalam container sama dengan hash program on-chain yang
disediakan untuk perintah tersebut. Karena build sudah diunggah ke image, tidak
perlu melakukan rebuild lengkap executable yang bisa 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-beta.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 verifikasi 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 Anda ingin terus
bekerja 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
akan 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-name
karena repositori Squads mencakup beberapa program. Kita menggunakan flag--bpf
karenasquads_mpl
telah diverifikasi sebelumnya 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 ✅
Kesimpulan
Menggunakan build terverifikasi di Solana memastikan integritas dan kepercayaan program Anda di jaringan dan memungkinkan pengembang untuk 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 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 + Disclaimer
Meskipun build terverifikasi adalah alat yang ampuh untuk memastikan integritas program Solana Anda, ini tidak sepenuhnya trustless dalam pengaturan default. Image docker dibangun dan dihosting oleh Solana Foundation.
Perlu diketahui bahwa Anda membangun proyek Anda dalam image docker yang diunduh dan seluruh pengaturan Anda disalin ke dalam image docker tersebut untuk pembangunan 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
menggunakan data verifikasi on chain yang disimpan dalam
PDA
yang diturunkan dari otoritas deploy program dan
program verify.
Program verifikasi dijalankan 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 build terverifikasi.
Security.txt untuk program Solana
Selain build terverifikasi, Anda juga dapat menambahkan file security.txt
ke
program Anda. Di masa mendatang, setelah diimplementasikan, security.txt
akan
menyimpan pubkey verifikator 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 pubkey
verifikator. Secara default, ini adalah pubkey yang sama yang membangun dan
men-deploy program. Tetapi juga bisa berupa pubkey lain yang dapat ditentukan
dalam security.txt
.
Fitur security.txt
memungkinkan pengembang untuk menyematkan informasi kontak
dan keamanan secara langsung dalam kontrak pintar Solana mereka. Terinspirasi
oleh securitytxt.org, pendekatan ini menyediakan cara
yang terstandarisasi bagi peneliti keamanan untuk menghubungi pengelola proyek,
bahkan jika mereka hanya mengetahui alamat kontrak.
Mengapa menggunakan security.txt?
Untuk banyak proyek, terutama yang lebih kecil atau pribadi, mengidentifikasi
pengembang hanya dari alamat kontrak bisa menjadi sulit dan memakan waktu.
Menyematkan file security.txt
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 diakses melalui alat seperti Solana Explorer,
memastikan bahwa detail kontak dan keamanan Anda tersedia bagi siapa saja 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 langsung ke dalam kontrak. Ini menghindari kebutuhan untuk upgrade program yang sering.
-
Verifikasi: Sebelum men-deploy, verifikasi format dan konten menggunakan alat
query-security-txt
, yang dapat memvalidasi program onchain dan binary 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 bagaimana security.txt terlihat di Solana Explorer
Proyek security.txt
dikelola oleh
Neodyme Labs
Is this page helpful?