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. 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:

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 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:

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

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 -e
examples/hello_world/target/deploy/hello_world.so -i
ellipsislabs/hello_world_verifiable_build:latest -p
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn

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 ID
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:
"examples/hello_world/target/deploy/hello_world.so"
Executable hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executable
matches on-chain program data ✅

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: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Program hash matches ✅

Squads V3

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

Perhatikan bahwa kita perlu menentukan library-name karena repositori Squads mencakup beberapa program. Kita menggunakan flag --bpf karena squads_mpl telah diverifikasi sebelumnya dengan Anchor.

Output akhir:

Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
On-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
Program hash matches ✅

Drift V2

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

Output akhir:

Executable Program Hash from repo: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
Program hash matches ✅

Marginfi V2

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

Output akhir:

Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program 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:

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 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?