Alat untuk Mendeteksi Kontrak Cerdas Metamorfik Kecerdasan Data PlatoBlockchain. Pencarian Vertikal. Ai.

Alat untuk Mendeteksi Kontrak Cerdas Metamorfik

Asumsi keamanan Ethereum yang penting adalah bahwa kode kontrak pintar tidak dapat diubah dan oleh karena itu tidak dapat diubah setelah digunakan di blockchain. Dalam praktiknya, beberapa kontrak pintar bisa perubahan โ€“ bahkan setelah mereka dikerahkan. Dengan beberapa trik cerdas, Anda dapat membuat kontrak cerdas metamorf yang โ€œmetamorfosisโ€ menjadi sesuatu yang lain โ€“ dan dengan memahami apa yang memungkinkannya, Anda dapat mendeteksinya.

Kontrak cerdas metamorfik dapat berubah, artinya pengembang dapat mengubah kode di dalamnya. Kontrak pintar ini menimbulkan risiko serius bagi pengguna web3 yang menaruh kepercayaan mereka pada kode yang mereka harapkan untuk dijalankan dengan konsistensi mutlak, terutama karena aktor jahat dapat mengeksploitasi kemampuan mengubah bentuk ini. Bayangkan seorang penyerang menggunakan teknik ini untuk "memeluk" orang-orang yang mempertaruhkan token dalam kontrak pintar yang tidak mereka sadari adalah metamorf. Serangan berdasarkan ini dan premis serupa dapat melengkapi scammers untuk memangsa orang dan umumnya merusak kepercayaan pada janji penuh sistem terdesentralisasi.

Untuk menganalisis apakah kontrak pintar berisi properti metamorf, Saya membangun yang sederhana Detektor Kontrak Metamorfik (terinspirasi oleh dan dibangun di atas karya asli Jason pemahat, 0usia, dan orang lain). Siapa pun dapat menggunakan alat ini untuk memeriksa apakah kontrak tertentu menunjukkan tanda bahaya yang dapat mengindikasikan potensi metamorfisme. Metodenya tidak mudah: hanya karena kontrak pintar menunjukkan tanda, tidak berarti itu harus metamorf; dan hanya karena tidak, tidak berarti itu aman. Pemeriksa hanya menawarkan penilaian awal yang cepat bahwa kontrak mungkin menjadi metamorf berdasarkan indikator yang mungkin. 

Pengguna Web3 harus membiasakan diri dengan ancaman yang ditimbulkan oleh kontrak metamorf sehingga mereka dapat waspada dan menghindari kemungkinan serangan. Pengindeks dompet dan blockchain dapat membantu dengan memperingatkan pengguna sebelum mereka berinteraksi dengan kontrak pintar yang mungkin berisi properti metamorf. Alat ini dimaksudkan untuk membantu mendidik orang tentang potensi ancaman iniโ€ฆ dan mempertahankannya.

Mendeteksi kontrak pintar metamorfik

Grafik Detektor Kontrak Metamorfik Saya membangun analisis enam properti yang mungkin menunjukkan jika kontrak pintar adalah metamorfosis.

    1. Apakah kode metamorf yang diketahui digunakan untuk menyebarkan kontrak? Jika bytecode metamorfik yang diketahui โ€“ kode yang dapat dibaca mesin virtual tingkat rendah yang diubah menjadi kontrak cerdas Ethereum, biasanya ditulis dalam Solidity, setelah dikompilasi โ€“ muncul dalam transaksi untuk penerapan kontrak pintar tertentu, itu adalah tanda bahaya besar. Di bagian selanjutnya, kita akan membahas salah satu contoh bytecode metamorf yang dikembangkan oleh 0age. Peringatan penting: Ada kemungkinan variasi bytecode metamorf yang tak terhitung banyaknya, yang membuat pendeteksian semua varietas menjadi sulit. Dengan memindai contoh-contoh terkenal, detektor menghilangkan buah yang menggantung rendah untuk penyerang yang hanya menyalin dan menempelkan contoh yang ada.
    2. Bisakah kode kontrak pintar merusak diri sendiri? Untuk mengganti kode dalam kontrak โ€“ langkah kunci dalam membuat kontrak metamorf โ€“ pengembang pertama-tama harus menghapus kode yang sudah ada sebelumnya. Satu-satunya cara untuk melakukannya adalah dengan menggunakan OPcode PEMBANGUNAN SENDIRI, perintah yang melakukan persis seperti yang terdengar โ€“ menghapus semua kode dan penyimpanan di alamat kontrak tertentu. Kehadiran kode penghancuran diri dalam kontrak tidak membuktikan bahwa itu metamorf; namun, ia menawarkan petunjuk bahwa kontrak mungkin menjadi metamorf dan perlu diketahui, bagaimanapun, apakah kontrak yang Anda andalkan dapat nuke sendiri.
    3. Apakah kontrak pintar memanggil kode dari tempat lain? Jika kontrak pintar yang dimaksud tidak dapat secara langsung menghancurkan dirinya sendiri, itu mungkin masih dapat menghapus dirinya sendiri dengan menggunakan opcode DELEGATECALL. Opcode ini memungkinkan kontrak pintar secara dinamis memuat dan mengeksekusi kode yang ada di dalam kontrak pintar lain. Bahkan jika kontrak pintar tidak berisi opcode SELFDESTRUCT, ia dapat menggunakan DELEGATECALL untuk memuat kode penghancuran diri dari tempat lain. Meskipun fungsi DELEGATECALL tidak secara langsung menunjukkan apakah kontrak cerdas bersifat metamorf, ini adalah petunjuk yang mungkin โ€“ dan potensi masalah keamanan โ€“ yang perlu diperhatikan. Berhati-hatilah bahwa indikator ini berpotensi meningkatkan banyak positif palsu. 
    4. Apakah kontrak lain menerapkan kontrak ini? Kontrak metamorf dapat digunakan hanya oleh kontrak pintar lainnya. Ini karena kontrak metamorfik diaktifkan oleh opcode lain, yang hanya dapat digunakan oleh kontrak pintar lainnya, yang disebut CREATE2. (Kita akan membahas CREATE2 โ€“ cara kerjanya dan mengapa hal itu penting โ€“ lebih lanjut di bagian selanjutnya.) Sifat ini adalah salah satu indikator yang paling tidak mencolok dari kemungkinan metamorfisme; itu adalah prasyarat yang diperlukan tetapi tidak cukup. Memindai sifat ini kemungkinan akan meningkatkan banyak kesalahan positif โ€“ tetapi ini adalah informasi berharga untuk diketahui karena dapat menimbulkan kecurigaan dan memberikan alasan untuk meneliti kontrak lebih lanjut, terutama jika kontrak pintar berisi opcode yang dijelaskan selanjutnya.
    5. Apakah kontrak penyebar berisi opcode CREATE2? Seperti disebutkan di atas, penyebaran melalui CREATE2 adalah prasyarat penting untuk metamorfisme. Jika kontrak penyebar berisi opcode CREATE2, itu mungkin menunjukkan bahwa ia menggunakan CREATE2 untuk menyebarkan kontrak yang dimaksud. Jika penyebar memang menggunakan CREATE2 untuk menyebarkan kontrak tersebut, sementara itu tidak berarti kontrak itu harus metamorf, itu berarti bahwa itu mungkin menjadi metamorf dan mungkin bijaksana untuk melanjutkan dengan hati-hati dan menyelidiki lebih lanjut. Sekali lagi, waspadalah terhadap kesalahan positif: BUAT2 punya banyak penggunaan yang sah, termasuk memperkuat Solusi penskalaan โ€œLapisan 2โ€ dan membuatnya lebih mudah untuk membuat dompet kontrak pintar yang dapat meningkatkan web3 orientasi pengguna dan opsi pemulihan utama.
    6. Apakah kodenya berubah? Ini adalah yang paling jelas, tetapi hanya akan muncul setelah kontrak metamorfik telah berubah. Jika hash kode kontrak pintar โ€“ pengidentifikasi kriptografi yang unik โ€“ berbeda dari saat kontrak pertama kali diterapkan, maka kemungkinan kode tersebut telah dihapus, diganti, atau diubah. Jika hash tidak lagi cocok, maka sesuatu tentang kode telah berubah dan kontraknya mungkin metamorf. Bendera ini adalah indikator metamorfisme yang paling pasti, tetapi tidak akan membantu memprediksi atau mendahului morf karena hanya memeriksa bahwa itu sudah terjadi.

Selain membangun alat baris perintah sederhana untuk Metamorphic Contract Detector, saya membuat beberapa contoh smart contract yang menunjukkan skenario kontrak scam metamorphic staking, yang akan saya jelaskan di bagian selanjutnya. Semua kode tersedia di ini Repositori GitHub

Bagaimana aktor jahat dapat menggunakan kontrak metamorfik untuk mencuri dana orang

Berikut adalah bagaimana seseorang dapat menggunakan kontrak cerdas metamorf sebagai bagian dari penipuan. 

Pertama adalah fase setup. Penyerang menyebarkan kontrak pintar di alamat tertentu di blockchain menggunakan dua alat: bytecode metamorf dan opcode CREATE2. (Kami akan memperluas kedua konsep ini nanti.) Bytecode metamorfik kemudian melakukan apa yang disarankan oleh namanya dan "berubah". Di sini, itu berubah menjadi mempertaruhkan kontrak di mana pengguna dapat mempertaruhkan token ERC-20. (Sekali lagi, kita akan membahas detail trik morphing ini nanti. Janji!)

Berikutnya adalah umpan dan saklar. Pengguna yang tidak curiga mempertaruhkan token mereka dalam kontrak ini, terpikat oleh kemungkinan mendapatkan hasil atau keuntungan lainnya. Penyerang kemudian menghapus semua kode taruhan dan "status" โ€“ penyimpanan atau memori blockchain โ€“ di alamat kontrak pintar ini menggunakan OPcode PEMBANGUNAN SENDIRI dibahas di bagian sebelumnya. (Perlu dicatat bahwa token โ€“ yang ada sebagai bagian dari kontrak ERC-20 yang terpisah โ€“ tetap ada, tidak terpengaruh oleh kontrak yang dihancurkan sendiri.)

Akhirnya, tarikan karpet. Penyerang menggunakan kembali bytecode metamorfik yang sama yang digunakan dalam fase penyiapan untuk "menerapkan kembali" kontrak baru. Kontrak baru ini disebarkan ke alamat yang sama yang baru saja dikosongkan oleh kontrak penghancuran diri. Namun, kali ini, bytecode "berubah" (sekali lagi, kami akan menjelaskan caranya nanti) menjadi kontrak berbahaya yang dapat mencuri semua token yang dipertaruhkan di alamat kontrak. Penipuan selesai. 

Risiko yang ditimbulkan oleh kontrak cerdas metamorf sekarang sudah jelas terlihat. Tapi Anda mungkin masih bertanya-tanya, bagaimana sebenarnya trik metamorfisme ini bekerja? Untuk memahami itu, Anda harus menyelidiki lebih dalam, ke tingkat bytecode. 

Bagaimana CREATE2 membuka kemungkinan metamorfisme 

BUAT2 adalah peningkatan opcode, diperkenalkan ke Ethereum pada Februari 2019, yang menawarkan cara baru untuk menerapkan kontrak pintar. 

CREATE2 memberi pengembang lebih banyak kontrol atas penyebaran kontrak pintar mereka daripada yang mereka miliki sebelumnya. Opcode CREATE asli mempersulit pengembang untuk mengontrol alamat tujuan untuk kontrak pintar yang akan digunakan. Dengan CREATE2, orang dapat mengontrol dan mengetahui alamat kontrak pintar tertentu terlebih dahulu, sebelum benar-benar menyebarkannya ke blockchain. Pengetahuan sebelumnya ini โ€“ ditambah beberapa trik cerdas โ€“ adalah yang memungkinkan orang membuat kontrak cerdas metamorfik. 

Bagaimana CREATE2 dapat memprediksi masa depan? Perhitungan opcode bersifat deterministik: selama input tidak berubah, alamat yang ditentukan oleh CREATE2 tidak akan berubah. (Bahkan perubahan terkecil akan menyebabkan penerapan terjadi di tempat lain.)

Secara lebih terperinci, CREATE2 adalah fungsi yang menggabungkan dan menggabungkan beberapa elemen. Pertama, ini menggabungkan alamat penyebar (atau pengirim): kontrak pintar yang memulai yang bertindak sebagai induk dari kontrak yang akan dibuat. Selanjutnya, ia menambahkan nomor arbitrer yang disediakan oleh pengirim (atau "garam"), yang memungkinkan pengembang untuk menyebarkan kode yang sama ke alamat yang berbeda (dengan mengubah garam) dan mencegah penimpaan kontrak yang sudah ada dan identik. Terakhir, ia menggunakan hash keccak256 dari beberapa bytecode inisialisasi kontrak pintar (โ€œinitโ€), yang merupakan benih yang berubah menjadi kontrak pintar baru. Kombinasi hash-bersama ini menentukan alamat Ethereum dan kemudian menyebarkan bytecode yang diberikan ke alamat itu. Selama bytecode tetap sama persis, CREATE2 akan selalu menyebarkan bytecode yang diberikan ke alamat yang sama di blockchain.

Seperti inilah rumus CREATE2. (Catatan: Anda akan melihat elemen lain, "0xFF," dalam contoh di bawah ini. Ini hanya penggunaan konstan CREATE2 untuk mencegah tabrakan dengan opcode CREATE sebelumnya.)

Sekarang kita memiliki cara untuk menyebarkan kode ke alamat deterministik, bagaimana mungkin untuk perubahan kode di alamat yang sama? Pada awalnya, ini mungkin tampak mustahil. Jika Anda ingin men-deploy kode baru menggunakan CREATE2, bytecode harus diubah, dan oleh karena itu, CREATE2 akan di-deploy ke alamat yang berbeda. Tetapi bagaimana jika seorang pengembang membangun bytecode sedemikian rupa sehingga dapat "berubah" menjadi kode yang berbeda ketika CREATE2 menyebarkan kontrak pintar?

Bagaimana kontrak metamorf benar-benar bekerja

Resep untuk mengubah kontrak cerdas menjadi kontrak metamorf membutuhkan total tiga kontrak cerdas, masing-masing memainkan peran unik.

Salah satu komponen penting ini adalah Metamorphic Contract Factory, otak dari operasi. "Pabrik" ini bertanggung jawab untuk menyebarkan Kontrak Metamorfik serta kontrak pintar lain yang disebut Kontrak Implementasi, dinamakan demikian karena kodenya akhirnya diimplementasikan di dalam Kontrak Metamorfik. Koreografi yang halus antara ketiga kontrak ini menghasilkan metamorfisme, seperti yang digambarkan dalam diagram di bawah ini.

Alat untuk Mendeteksi Kontrak Cerdas Metamorfik Kecerdasan Data PlatoBlockchain. Pencarian Vertikal. Ai.

Mari kita bahas setiap langkah, 1-7, secara rinci untuk menjelaskan operasi di tempat kerja.

Langkah 1: Pengembang mengatur segalanya

Seorang pembuat kode mendesain beberapa kode kontrak pintar โ€“ bytecode Kontrak Implementasi โ€“ yang pada akhirnya akan berakhir di Kontrak Metamorfik. Pengembang mengirimkan kode ini ke Metamorphic Contract Factory, sebuah kontrak pintar yang tujuan utamanya adalah untuk menyebarkan kontrak pintar lainnya. Tindakan ini menggerakkan seluruh proses pembuatan Kontrak Metamorfik.

Segala sesuatu yang mengikuti adalah hasil dari langkah awal ini. Memang, Langkah 1 hingga 6 terjadi dalam satu transaksi atom di blockchain, yang berarti hampir semuanya sekaligus. Langkah-langkah ini dapat diulang lagi dan lagi, tanpa batas, untuk mengganti kode di dalam Kontrak Metamorfik dan membuatnya terus berubah.

Langkah 2: Pabrik menyebarkan Kontrak Implementasi

Kontrak pertama yang disebarkan Pabrik adalah Kontrak Implementasi, yang berisi kode implementasi. (Kreatif, kita tahu.) Pikirkan Kontrak Implementasi sebagai dok pemuatan, atau titik jalan, yang menyimpan beberapa kode sebelum dikirim ke tujuan akhirnya, yang dalam hal ini akan berada di dalam Kontrak Metamorfik. 

Langkah 3: Alamat Kontrak Implementasi Toko Pabrik

Setelah penyebarannya ke blockchain, Kontrak Implementasi akan selalu ada di beberapa alamat blockchain. Pabrik menyimpan alamat kontrak ini dalam memorinya sendiri (untuk digunakan nanti, di Langkah 5). 

Langkah 4: Pabrik menyebarkan Kontrak Metamorfik

Pabrik menyebarkan Kontrak Metamorfik menggunakan CREATE2 dan bytecode metamorf. Anda dapat menemukan panduan teknis dan mendalam tentang cara kerja bytecode metamorf di sini, tetapi cukup untuk mengatakan bahwa ketika bytecode metamorfik dieksekusi, kode tersebut menyalin kode dari beberapa lokasi on-chain lainnya โ€“ dalam hal ini, dari Kontrak Implementasi โ€“ ke dalam Kontrak Metamorfik. Seperti yang kita bicarakan di bagian terakhir, karena CREATE2 bersifat deterministik โ€“ selama pengirim, garam, dan bytecode yang sama digunakan โ€“ maka alamat Kontrak Metamorfik tetap sama tidak peduli berapa kali langkah-langkah ini diulang.

Di bawah ini adalah contoh seperti apa bytecode metamorf, dari repo metamorf oleh 0 usia. Ini hanyalah salah satu contoh bytecode metamorf - variasi yang berpotensi tak terhitung ada, sangat memperumit deteksi kontrak metamorf.

Alat untuk Mendeteksi Kontrak Cerdas Metamorfik Kecerdasan Data PlatoBlockchain. Pencarian Vertikal. Ai.

Langkah 5: Kueri bytecode metamorfik Pabrik untuk alamat Kontrak Implementasi

Bytecode metamorf meminta Pabrik untuk alamat Kontrak Implementasi (seperti yang disimpan di Langkah 3). Tidak masalah jika alamat Kontrak Implementasi berubah selama bytecode metamorfik yang meminta alamat tetap sama. Memang, jika pengembang kemudian menyebarkan Kontrak Implementasi baru โ€“ seperti kontrak jahat yang dirancang untuk mencuri token โ€“ itu akan diterapkan pada alamat blockchain yang berbeda, sesuai Langkah 2. Ini tidak berdampak pada pembuatan Kontrak Metamorfik.

Langkah 6: Kode Kontrak Implementasi akan disalin ke dalam Kontrak Metamorfik

Menggunakan alamat blockchain yang dipelajari di Langkah 5, bytecode metamorfik menempatkan kode di Kontrak Implementasi dan menyalin kode itu ke penyimpanan lokal Kontrak Metamorfik. Beginilah cara Kontrak Metamorfik berubah: dengan menyalin kode dari Kontrak Implementasi. 

Langkah 7: Bilas dan ulangi

Pengembang dapat mengulangi Langkah 1 hingga 6 berulang-ulang dan mengganti kode dalam Kontrak Metamorfik dengan apa pun yang mereka suka melalui Kontrak Implementasi baru. Yang diperlukan hanyalah menggunakan opcode SELFDESTRUCT โ€“ atau, lebih tepatnya, opcode DELEGATECALL yang pada akhirnya menghasilkan SELFDESTRUCT โ€“ untuk menghapus kode yang sudah ada sebelumnya di Metamorphic Contract. Dengan mengulangi siklus dengan bytecode Kontrak Implementasi baru, Kontrak Metamorfik akan, seperti sihir, berubah!

Menggunakan teknik ini untuk membuat kontrak metamorf, pengembang yang cerdas dapat terus-menerus menggeser posisi pengguna web3. Pertimbangkan, misalnya, skenario penipuan lagi. Pengembang mungkin pertama-tama menyebarkan Kontrak Implementasi dengan kode token-staking yang, melalui jalur melingkar yang digambarkan dalam grafik dan diuraikan dalam langkah-langkah di atas, berakhir di Kontrak Metamorfik. Penipu nantinya dapat merusak sendiri kode ini dan menggantinya dengan menerapkan Kontrak Implementasi baru yang berisi token-pencurian kode. 

Apa pun yang dikerahkan dalam Kontrak Implementasi pada akhirnya akan berakhir di Kontrak Metamorfik. Itulah inti dari triknya. 

***

Kontrak cerdas metamorfik mematahkan kontrak sosial web3 implisit bahwa apa yang Anda lihat adalah apa yang Anda dapatkan. Mirip dengan cara permainan cangkang menggunakan tiga cangkir bergerak untuk menyembunyikan bola, interaksi tiga kontrak dalam pembuatan kontrak metamorf membuat sulit untuk mengikuti fungsi kontrak yang sebenarnya. Permainan cangkang adalah perbandingan yang sangat tepat karena penipu kepercayaan diri akan sering menggunakan sulap dan penyesatan untuk memastikan mereka menang. Dalam versi web3, penulis kontrak metamorf juga dapat membuat โ€œbolaโ€ โ€“ kode implementasi, yaitu โ€“ menghilang (baca: penghancuran diri), dan mereka dapat menggantinya dengan apa pun yang mereka suka.

Adanya kontrak metamorfik berarti memungkinkan bagi pengguna web3 untuk membuat kontrak yang dapat berubah sesuka hati โ€“ itulah mengapa ancaman ini sangat penting untuk dipahami dan dipertahankan. Detektor Kontrak Metamorfik Saya menawarkan hanya langkah pertama menuju mengidentifikasi kontrak metamorf dengan sulap yang mereka gunakan. Ada beberapa cara detektor dapat ditingkatkan di masa depan. Misalnya, dengan memeriksa Pabrik (atau kontrak penyebar) secara rekursif yang membuat Kontrak Metamorfik, orang dapat melihat apakah Pabrik itu sendiri metamorf. Fitur ini akan menjadi tambahan yang berguna untuk Detektor versi 2 yang ditingkatkan.

Patut ditegaskan sekali lagi: Alat Detektor ini tidak terbukti bodoh. Bendera yang ditangkapnya tidak semuanya merupakan tanda potensi metamorf, tetapi mereka menawarkan petunjuk. Mengidentifikasi tanda-tanda ini hanyalah awal untuk penyelidikan yang lebih menyeluruh. Itu sebabnya kami memperluas Detektor untuk mencari tanda yang dapat dengan mudah menghasilkan positif palsu, seperti keberadaan opcode CREATE2 atau DELEGATECALL. Jika Anda memiliki saran untuk meningkatkan alat atau ingin membangun atau menambah pekerjaan awal ini, hubungi saya di .

Analisis kontrak pintar untuk sifat metamorf menggunakan alat Detektor dan mengunjungi GitHub repo keahlian yang lebih

Editor: Robert Hackett @rhhackett

***

Ucapan Terima Kasih: Saya ingin memberikan teriakan BESAR dan terima kasih kepada Robert Hackett, Eddy Lazzarin, Sam Ragsdale, Riyaz Faizullabhoy, Noah Citron, Mason Hall, dan Daejun Park atas umpan balik dan saran yang berharga dalam membuat pos dan alat ini menjadi hidup. 

***

Pandangan yang diungkapkan di sini adalah pandangan individu AH Capital Management, LLC (โ€œa16zโ€) yang dikutip dan bukan pandangan a16z atau afiliasinya. Informasi tertentu yang terkandung di sini telah diperoleh dari sumber pihak ketiga, termasuk dari perusahaan portofolio dana yang dikelola oleh a16z. Meskipun diambil dari sumber yang dipercaya dapat dipercaya, a16z belum memverifikasi informasi tersebut secara independen dan tidak membuat pernyataan tentang keakuratan informasi yang bertahan lama atau kesesuaiannya untuk situasi tertentu. Selain itu, konten ini mungkin termasuk iklan pihak ketiga; a16z belum meninjau iklan tersebut dan tidak mendukung konten iklan apa pun yang terkandung di dalamnya.

Konten ini disediakan untuk tujuan informasi saja, dan tidak boleh diandalkan sebagai nasihat hukum, bisnis, investasi, atau pajak. Anda harus berkonsultasi dengan penasihat Anda sendiri mengenai hal-hal itu. Referensi ke sekuritas atau aset digital apa pun hanya untuk tujuan ilustrasi, dan bukan merupakan rekomendasi investasi atau penawaran untuk menyediakan layanan konsultasi investasi. Selanjutnya, konten ini tidak ditujukan atau dimaksudkan untuk digunakan oleh investor atau calon investor mana pun, dan dalam keadaan apa pun tidak dapat diandalkan saat membuat keputusan untuk berinvestasi dalam dana yang dikelola oleh a16z. (Penawaran untuk berinvestasi dalam dana a16z hanya akan dilakukan dengan memorandum penempatan pribadi, perjanjian berlangganan, dan dokumentasi lain yang relevan dari dana tersebut dan harus dibaca secara keseluruhan.) Setiap investasi atau perusahaan portofolio yang disebutkan, dirujuk, atau dijelaskan tidak mewakili semua investasi dalam kendaraan yang dikelola oleh a16z, dan tidak ada jaminan bahwa investasi tersebut akan menguntungkan atau bahwa investasi lain yang dilakukan di masa depan akan memiliki karakteristik atau hasil yang serupa. Daftar investasi yang dilakukan oleh dana yang dikelola oleh Andreessen Horowitz (tidak termasuk investasi yang penerbitnya tidak memberikan izin kepada a16z untuk mengungkapkan secara publik serta investasi yang tidak diumumkan dalam aset digital yang diperdagangkan secara publik) tersedia di https://a16z.com/investments /.

Bagan dan grafik yang disediakan di dalamnya hanya untuk tujuan informasi dan tidak boleh diandalkan saat membuat keputusan investasi apa pun. Kinerja masa lalu tidak menunjukkan hasil di masa depan. Konten berbicara hanya pada tanggal yang ditunjukkan. Setiap proyeksi, perkiraan, prakiraan, target, prospek, dan/atau pendapat yang diungkapkan dalam materi ini dapat berubah tanpa pemberitahuan dan mungkin berbeda atau bertentangan dengan pendapat yang diungkapkan oleh orang lain. Silakan lihat https://a16z.com/disclosures untuk informasi penting tambahan.

Stempel Waktu:

Lebih dari Andreessen Horowitz