zkApe: Thank you so much Brandon for accepting this interview! Want to tell your zkApe followers about yourself? What were you doing before working on zk area and what got you excited about this space?
Brandon: Hi everyone! My background: I was lucky enough to be exposed to computers and the internet growing up, and I taught myself programming at an early age and more generally an assortment of computer science topics especially as I got older.
From an academic standpoint, I ended up attending Carnegie Mellon University where I graduated with a Computer Science degree with a focus in Programming Language Theory. This led me to an obsession with applying this work to industry through making heavy use of functional programming. I worked for a while in the social space doing frontend and infrastructure work on Web, Android, and iOS through internships at Facebook and Mozilla, and full-time at a startup (acquired by Pinterest) and Pinterest – throughout my work I always tried to bring my programming theory background into my work and in the broader community via speaking at conferences on the topic.
From a crypto standpoint, I first learned about Bitcoin in 2009 after a Slashdot post–I messed around with the Bitcoin node software a little at that point, but not too seriously until 2011 where I started mining Bitcoin for a year or two. Unfortunately, I lost all the Bitcoin I mined early on, but I always kept an eye on the crypto space.
Initially what got me most excited about this space was getting to build with this challenging technology – towards the end of 2017, I had the opportunity to join Evan and Izaak on a project that led to the company, O(1) Labs, and the blockchain protocol, Mina, and I found this was a nice way to combine my interest in crypto with this academic approach to building software. In particular, initially, I was attracted to this project because of the engineering challenges it would entail especially with Mina’s application of recursive zkSNARKs. For Mina, we had to develop an embedded programming language for reasoning about SNARKs and we shipped a series of zk circuits that fully implemented a secure proof of stake consensus protocol for Mina’s mainnet, which launched over a year ago – this is what powers Mina’s “22kb blockchain”.
These days I’m also very excited for the potential applications of zk technology in this space and building tools to make it easier for more developers to take advantage of the zk tech – and I’ll share more about this later in our interview.
You focused on developer tooling for zkApps for nearly 6-8 month. What would you like to say about the potential of zkapp?
I’m really excited about the potential for zkApps! Building zero knowledge proof applications is hard and we’re building SnarkyJS, our framework for building zkApps, to make it easier for developers: SnarkyJS is a library in TypeScript – users don’t have to learn a new programming language. Using TypeScript enables developers to use JavaScript and TypeScript, a language and toolset ecosystem that 12million+ developers are already familiar with, to write smart contracts.
zkApps on Mina execute off-chain, privately in a user’s web browser, and generate a zero-knowledge proof that stands in for the computation, in the same way that Mina has a proof that stands in for the blockchain consensus computation.
Because execution occurs on a user’s machine, users have real privacy – their data never leaves their custody. Because execution occurs on a user’s machine, gas cost is predictable because on-chain nodes just verify a proof. Because execution occurs on a user’s machine, and because of the power of recursive proofs, the computation can scale without sacrificing privacy nor gas costs!
With zkOracles, which O(1) Labs is working on (work in progress), we can bridge web2 data into web3 without the web2 entity having to change anything about their APIs. We can build proofs like: “My real world fiat bank account has more than $5,000 in it,” without revealing any personal information, or “My twitter account has more than 10,000 followers,” without revealing your exact twitter account, and we can bring that data on-chain to be used in web3 applications.
With the underlying proof system’s (Kimchi) infinite recursion feature and SnarkyJS, users can build application-specific-zk-rollups for high-performance use-cases. And when combined with privacy, things like multiplayer games with private state like Poker become easy to build.
With Mina’s zkBridge, which Nil Foundation is working on (work in progress), proofs created via zkApps on Mina can augment existing web3 applications. For example, we can create a zkApp that attests to KYC verification for a user without revealing any sensitive information about them, and then bridge that to an EVM chain as a non-transferrable (soulbound) NFT; then Solidity DeFi applications can build on top of this primitive without even needing to use zkApps directly. We can also use some zk-rollup application on Mina as a pluggable L2 that can deeply connect into any chain with a Mina bridge on it.
With the browser-based Mina node implementation, which Chainsafe is working on (work in progress), users interacting with zkApps will be able to do so with a fully decentralized and fully secure Mina node that runs entirely on their web browser – this is in contrast to interactions with web3 applications that typically rely on a default public RPC endpoint behind their MetaMask integrations. Using the browser node, users can actually participate in web3 in a fully decentralized manner.
More developers and crypto users are now paying attention to zk proof from a building point of view than ever before. What is the main advantage of zk proof?
The main advantage of zk proofs is that they enable us to build the applications that I described above – and more than that, applications that I and others already in this space haven’t thought of yet! Almost anything with privacy or off-chain execution is now possible. And we hope that SnarkyJS and zkApps can fulfill whatever you dream up (and if doesn’t, please give us some feedback so we can fix it).
We tend to focus on the blockchain applications of zero knowledge. It's always in that intersection but i only have like one or two examples. How about are you looking towards or working towards non-blockchain, zero knowledge?
At O(1) Labs, we are thinking about zero knowledge a bit outside of the blockchain context. We believe that a lot of the initial applications people will build do make more sense in the context of a zero-knowledge-state-layer (which Mina’s blockchain is very well-suited for), but we also intend to make Kimchi+SnarkyJS be a best-in-class tool for zero knowledge applications outside of blockchain too, just in case that makes more sense for your products. We have some ideas about applying but we’re still early here. Keep an eye out for our announcements!
Okay Brandon we got very good answers! Here is the last question; what would you recommend to people who want to improve in zk area? What can they do to make better progress?
To improve in the zk area you first need to decide which part of zk you want to focus on: deep cryptography, designing products,or developing applications. The deep cryptography focus area requires a strong understanding of advanced mathematics to wrap your head around. This is the area that I am not as strong in, but I do have a basic understanding. The best resource that I found for wrapping my head around an older construction of SNARKs is Vitalik’s zkSNARK series Beyond that, to learn more about Mina’s proof system in particular, you can read the Mina book. There are more and more reasonably accessible resources coming out as folks become more interested in zero knowledge, but I’m not too familiar with them. Finally, when you’re more ramped up with the basics, the best way to keep up with what is happening is to follow research papers in this space. I want to stress that it’s not important to understand the deep cryptography details to build interesting products and infrastructure in the zk space.
To design products it is important to have a really good understanding of the capabilities of this technology — the best way to do this is to follow folks building the tools (like O(1) Labs, for example, among others!), keep up to date with presentations from relevant conferences, and talk to other builders.
For developing applications, practice, practice, practice. Start building. We hope you try SnarkyJS and zkApps because we believe these are the best choice for most kinds of zk applications, and these tools try to really make it easy for you to get started, but you can also try other tools as well — the most important thing is to start building. If you don’t know what to build, try to remake examples without looking at the code, or talk to the folks interested in designing products! Good luck everyone!
zkApe: Bu röportajı kabul ettiğin için çok teşekkürler Brandon! zkApe takipçilerine kendinden bahsetmek ister misin? zk alanında çalışmaya başlamadan önce ne yapıyordun? Seni bu alanda heyecanlandıran ne oldu?
Brandon: Herkese merhaba! Background'ım hakkında bilgi verecek olursam: Büyürken bilgisayarlarla ve internetle haşır neşir olduğum için şanslıyım, erken yaşta kendi kendime programlama öğrendim ve yaş aldıkça genel olarak bilgisayar bilimi konularını da öğrenmiş oldum.
Akademik açıdan, Carnegie Mellon Üniversitesi'ne gittim ve oradan Programlama Dili Teorisi üzerine odaklanan bir çalışmayla Bilgisayar Bilimleri bölümünden mezun oldum. Bu çalışma, fonksiyonel programlamadan yoğun bir şekilde yararlanarak endüstride de uygulama gibi bir takıntı haline dönüştü. Facebook ve Mozilla'da stajyer olarak ve bir start-up'ta (Pinterest tarafından satın alındı) ve Pinterest'te tam zamanlı olarak çalışarak sosyal alanda önyüz ve altyapı alanlarında zaman geçirdim - çalışma hayatım boyunca programlama kuramına dair bildiklerimi sürekli işe taşımaya çalıştım ve bu alanda konferanslarda da konuşmalar yaparak topluluğa da duyurmayı hedefledim.
Kripto konusundaysa, Bitcoin'den ilk kez 2009 yılında bir Slashdot paylaşımı sayesinde haberim oldu - O zamanlar Bitcoin node yazılımlarını biraz kurcaladım ama esasında tam anlamıyla 2011 yılında ciddiye almaya başladım ve bir iki yıl kadar Bitcoin madenciliği yaptım. Maalesef, o dönemlerde kazdığım Bitcoinlerin hepsini kaybettim ama kripto alanını sürekli izlemeye devam ettim.
Başlangıçta, bu alanla ilgili beni en çok heyecanlandıran şey bu zorlu teknolojiyle bir şeyler geliştirmekti - 2017'nin sonuna doğru, Evan ve Izaak'la bir projeye katılma fırsatını elde ettim; bunun sonucunda O(1) Labs şirketi ve blok zinciri protokolü Mina doğdu. Bunu kriptoya olan ilgimi, yazılım geliştirmeye akademik bir yaklaşımla birleştirme yolu olarak görüyorum. Başlangıçta, özellikle bu projenin ilgimi çekme nedeni, Mina'nın tekrarlayan (recursive) zkSNARK'ları uygulamasıyla gerekecek mühendislik zorlukları oldu. Mina için, SNARK'lar hakkında akıl yürütme (reasoning) için gömülü bir programla dili geliştirmek zorunda kaldık ve lansmanını bir yıl önce yaptığımız Mina mainnet için güvenli bir proof of stake konsensüs protokolünü tam anlamıyla uygulamaya alan bir dizi zk devresi de geliştirdik - (Mina'nın "22kb blok zincirinin" temelinde bu yatıyor).
Bugünlerde de zk teknolojisinin bu alandaki potansiyel uygulamaları ve daha fazla geliştiricinin zk teknolojisinden faydalanabilmesi için araçlar geliştirme konusu beni heyecanlandırıyor - röportajın ilerleyen bölümlerinde bu konuyu biraz açacağım.
Yaklaşık 6-8 aydır zkApp'ler için geliştirici araçları üzerine odaklanıyorsun. zkApp'in potansiyeli hakkında ne söylemek istersin?
zkApp'lerin potanisyeli beni gerçekten heyecanlandırıyor! Zero knowledge proof uygulamaları geliştirmek zorlu bir iş. Biz de geliştiricilerin işini kolaylaştırmak için, zkApp’leri geliştirme çerçevemiz olan SnarkyJS'yi geliştiriyoruz: SnarkyJS, Typscript kütüphanesi - kullanıcıların yeni bir programlama dili öğrenmesine gerek yok yani. TypeScript kullanmak, 12 milyondan fazla geliştiricinin zaten aşina olduğu bir dil ve araç seti ekosistemi olduğundan dolayı geliştiricilerin JavaScript ve TypeScript kullanarak akıllı kontratlar yazmasına olanak sağlıyor.
Mina'daki zkApp'ler, zincir dışında gizli olarak kullanıcının web tarayıcısında yürütülüyor ve tıpkı Mina'daki bir proof'un blok zincir konsensüs hesaplamasında (computation) olduğu gibi hesaplamada kullanılan bir zero-knowledge proof oluşturuyor.
Yürütme, kullanıcının makinesinde gerçekleştiğinden dolayı kullanıcılar gerçek gizliliğe sahip oluyorlar - verileri asla kendi koruma alanlarının dışına çıkmıyor. Yürütme kullanıcının makinesinde gerçekleştiğinden dolayı, zincir üzeri node'lar yalnızca proof'u doğruladığından dolayı gas ücreti de tahmin edilebilir oluyor. Yürütme kullanıcının makinesinde gerçekleştiğinden ve tekrarlayan proof'un gücü sayesinde, hesaplama gizlilikten veya gas maliyetlerinden ödün vermeden ölçeklenebiliyor!
O(1) Labs'ın üzerinde çalıştığı zkOracles ile (çalışma devam ediyor), web2 kuruluşun API'larında herhangi bir şey değiştirmek zorunda kalmadan web2 verilerini web3'ye taşıyabiliyoruz. Herhangi bir kişisel bilgiyi ifşa etmeden "Gerçek hayattaki fiat banka hesabımda 5.000 dolardan fazla para var," veya hangi Twitter hesabı olduğunu göstermeksizin "Twitter hesabımda 10.000'den fazla takipçim var," gibi kanıtlar (proof) oluşturabilir, bu verileri zincirin üzerine taşıyarak web3 uygulamalarında kullanımına olanak sağlayabiliriz.
Altta yatan proof sisteminin (Kimchi) sınırsız tekrarlama özelliği ve SnarkyJS sayesinde, kullanıcılar yüksek performans gerektiren kullanım alanları için uygulamaya-özel-zk-proof'lar oluşturabilirler. Gizlilikle birleştiğinde, Poker gibi gizli durum gerektiren çok oyunculu oyunları geliştirmek de kolaylaşır.
Nil Foundation'ın üzerinde çalıştığı Mina'nın zkBridge'i (çalışma devam ediyor) sayesinde, Mina'daki zkApp'lerle oluşturulan proof'lar mevcut web3 uygulamalarının becerilerini genişletebilir. Örneğin, bir kullanıcı hakkında hassas herhangi bir veriyi ifşa etmeksizin KYC doğrulaması gerçekleştiren bir zkApp oluşturabilir ve bunu daha sonra transfer edilemez (soulbound) bir NFT olarak bir EVM zincire taşıyabiliriz. Böylece, doğrudan zkApp'leri kullanmaya gerek kalmaksızın Solidity Defi uygulamaları bu bilgiyi kullanarak üzerine geliştirme yapabilir. Ayrıca, üzerinde Mina köprüsü bulunan bütün zincirlere derinden bağlanabilecek şekilde Mina üzerinde kullanıma hazır bir zk-rollup uygulaması da kullanabiliriz.
Chainsafe'in üzerinde çalıştığı tarayıcı tabanlı Mina node uygulamasıyla (çalışma devam ediyor), zkApp'lerle etkileşime geçen kullanıcılar tamamen web tarayıcıları üzerinde çalışan tam anlamıyla merkeziyetsiz ve tam anlamıyla güvenli bir Mina node'u ile bu işlemleri gerçekleştirebilecekler - bu durum, tipik olarak Metamask entegrasyonlarının arkasındaki herkese açık varsayılan bir RPC uç noktasına (endpoint) dayalı web3 uygulamalarıyla etkileşime geçme örneğine bir karşıtlık oluşturuyor. Tarayıcı node'unu kullanarak, kullanıcılar web3'ye gerçekten merkeziyetsiz bir şekilde katılım gösterebilirler.
Bugünlerde, daha fazla geliştirici ve kripto kullanıcısı, eskiye kıyasla zk proof kavramına geliştirme açısından daha fazla dikkat etmeye başladı. zk proof'un temel avantajı nedir?
zk proof'ların temel avantajı, yukarıda bahsettiğim uygulamaları geliştirmemize olanak sağlaması - hatta dahası da var, bu alanda benim veya başkalarının henüz hayalini bile kurmadığı uygulamalara olanak sağlayabilir! Gizlilik ve zincir dışı yürütme sayesinde artık neredeyse her şey mümkün. Biz de SnarkyJs ve zkApp'lerin, hayal edilebilecek her şeyi yerine getirmeey aracılık edeceğini umuyoruz (yetersiz kalırsa da bize geri bildirim verin ki düzeltebilelim).
Zero knowledge'ın blok zinciri uygulamalarına odaklanma eğilimindeyiz. Hep bu kesişimdeydi ama bir veya iki örnek verebilirim. Blok zincir dışındaki zero knowledge konusuna nasıl bakıyorsun veya nasıl çalışıyorsunuz?
O(1) Labs'de, zero knowledge'ı biraz blok zincir bağlamının dışında değerlendiriyoruz. İlk geliştirilecek uygulamaların, zero-knowledge-state-katmanı bağlamında daha anlamlı olacağına inanıyoruz (ki Mina block zinciri bu iş için gayet uygun); ancak Kimchi+SnarkyJS'yi de diğer ürünler için de anlamlı olabilmesi açısından blok zincir dışındaki zero knowledge uygulamaları için sınıfının en iyi aracı haline getirmeyi hedefliyoruz. Uygulamaya dair aklımızda birkaç fikir var ama bunlar için henüz erken. Yapacağımız duyuruları takipte kalın!
Süper Brandon, çok iyi yanıtlar aldık! Şimdi son sorumuza gelelim. Zk alanında kendini geliştirmek isteyenlere ne önerirsin? Bu alanda ilerlemek için neler yapabilirler?
ZK alanında kendini geliştirmek için önce zk'nın hangi yönüne odaklanacağına karar vermeli: derin kriptografi, ürün tasarımı veya uygulama geliştirme. Derin kriptografinin odak alanı, ileri matematik konusunda sağlam bir bilgi birikimi gerektiriyor. Bu benim çok da güçlü olmadığım bir alan, temel bilgiye sahibim. SNARK'ların eski bir yapısı konusunda benim en kavrayabildiğim en iyi kaynak, Vitalik'in zkSNARK serisiydi. Onun ötesinde, özellikle Mina'nın proof sistemi hakkında bilgi almak için Mina book'u da okuyabilirsiniz. Zero knowledge konusu çoğunluğun ilgisini çekmeye başladığından dolayı daha makul erişilebilir kaynaklar da ortaya çıkıyor ama ben pek aşina değilim. Son olarak, temel bilgileri edindikten sonra alanda neler olup bittiğini takip etmenin en iyi yolu, yayınlanan araştırma makalelerini takip etmek. zk alanında ilgi çekici ürünler ve altyapılar geliştirmek için derin kriptografinin ayrıntılarını anlamanın çok da önemli olmadığını da vurgulamak isterim.
Ürün tasarlamak için, bu teknolojinin becerilerini gerçekten iyi anlamak önemli - bunun en iyi yolu ise araçlar geliştiren insanları takip etmek (örneğin O(1) Labs gibi), ilgili konferanslarda yapılan sunumları takip etmek ve diğer geliştiricilerle konuşmak.
Uygulama geliştirmek içinse; pratik, pratik, pratik. Geliştirmeye başlayın. SnarkyJS'yi ve zkApp'leri denemenizi istiyoruz; çünkü bunların zk uygulamalarının çoğu için en iyi seçenek olduğuna inanıyoruz ve bu araçlar gerçekten başlangıçta işleri kolaylaştırmaya çalışıyor. Tabii başka araçları da deneyebilirsiniz - en önemli şey, geliştirmeye bir yerden başlamak. Ne geliştireceğinizi bilmiyorsanız da koda bakmadan mevcut örnekleri yeniden yapmaya çalışın ya da ürün tasarımıyla ilgilenen insanlarla konuşun! Herkese bol şans!
Share this post
ZK Talks with Brandon Kase
Share this post
zkApe: Thank you so much Brandon for accepting this interview! Want to tell your zkApe followers about yourself? What were you doing before working on zk area and what got you excited about this space?
Brandon: Hi everyone! My background: I was lucky enough to be exposed to computers and the internet growing up, and I taught myself programming at an early age and more generally an assortment of computer science topics especially as I got older.
From an academic standpoint, I ended up attending Carnegie Mellon University where I graduated with a Computer Science degree with a focus in Programming Language Theory. This led me to an obsession with applying this work to industry through making heavy use of functional programming. I worked for a while in the social space doing frontend and infrastructure work on Web, Android, and iOS through internships at Facebook and Mozilla, and full-time at a startup (acquired by Pinterest) and Pinterest – throughout my work I always tried to bring my programming theory background into my work and in the broader community via speaking at conferences on the topic.
From a crypto standpoint, I first learned about Bitcoin in 2009 after a Slashdot post–I messed around with the Bitcoin node software a little at that point, but not too seriously until 2011 where I started mining Bitcoin for a year or two. Unfortunately, I lost all the Bitcoin I mined early on, but I always kept an eye on the crypto space.
Initially what got me most excited about this space was getting to build with this challenging technology – towards the end of 2017, I had the opportunity to join Evan and Izaak on a project that led to the company, O(1) Labs, and the blockchain protocol, Mina, and I found this was a nice way to combine my interest in crypto with this academic approach to building software. In particular, initially, I was attracted to this project because of the engineering challenges it would entail especially with Mina’s application of recursive zkSNARKs. For Mina, we had to develop an embedded programming language for reasoning about SNARKs and we shipped a series of zk circuits that fully implemented a secure proof of stake consensus protocol for Mina’s mainnet, which launched over a year ago – this is what powers Mina’s “22kb blockchain”.
These days I’m also very excited for the potential applications of zk technology in this space and building tools to make it easier for more developers to take advantage of the zk tech – and I’ll share more about this later in our interview.
You focused on developer tooling for zkApps for nearly 6-8 month. What would you like to say about the potential of zkapp?
I’m really excited about the potential for zkApps! Building zero knowledge proof applications is hard and we’re building SnarkyJS, our framework for building zkApps, to make it easier for developers: SnarkyJS is a library in TypeScript – users don’t have to learn a new programming language. Using TypeScript enables developers to use JavaScript and TypeScript, a language and toolset ecosystem that 12million+ developers are already familiar with, to write smart contracts.
zkApps on Mina execute off-chain, privately in a user’s web browser, and generate a zero-knowledge proof that stands in for the computation, in the same way that Mina has a proof that stands in for the blockchain consensus computation.
Because execution occurs on a user’s machine, users have real privacy – their data never leaves their custody. Because execution occurs on a user’s machine, gas cost is predictable because on-chain nodes just verify a proof. Because execution occurs on a user’s machine, and because of the power of recursive proofs, the computation can scale without sacrificing privacy nor gas costs!
With zkOracles, which O(1) Labs is working on (work in progress), we can bridge web2 data into web3 without the web2 entity having to change anything about their APIs. We can build proofs like: “My real world fiat bank account has more than $5,000 in it,” without revealing any personal information, or “My twitter account has more than 10,000 followers,” without revealing your exact twitter account, and we can bring that data on-chain to be used in web3 applications.
With the underlying proof system’s (Kimchi) infinite recursion feature and SnarkyJS, users can build application-specific-zk-rollups for high-performance use-cases. And when combined with privacy, things like multiplayer games with private state like Poker become easy to build.
With Mina’s zkBridge, which Nil Foundation is working on (work in progress), proofs created via zkApps on Mina can augment existing web3 applications. For example, we can create a zkApp that attests to KYC verification for a user without revealing any sensitive information about them, and then bridge that to an EVM chain as a non-transferrable (soulbound) NFT; then Solidity DeFi applications can build on top of this primitive without even needing to use zkApps directly. We can also use some zk-rollup application on Mina as a pluggable L2 that can deeply connect into any chain with a Mina bridge on it.
With the browser-based Mina node implementation, which Chainsafe is working on (work in progress), users interacting with zkApps will be able to do so with a fully decentralized and fully secure Mina node that runs entirely on their web browser – this is in contrast to interactions with web3 applications that typically rely on a default public RPC endpoint behind their MetaMask integrations. Using the browser node, users can actually participate in web3 in a fully decentralized manner.
More developers and crypto users are now paying attention to zk proof from a building point of view than ever before. What is the main advantage of zk proof?
The main advantage of zk proofs is that they enable us to build the applications that I described above – and more than that, applications that I and others already in this space haven’t thought of yet! Almost anything with privacy or off-chain execution is now possible. And we hope that SnarkyJS and zkApps can fulfill whatever you dream up (and if doesn’t, please give us some feedback so we can fix it).
We tend to focus on the blockchain applications of zero knowledge. It's always in that intersection but i only have like one or two examples. How about are you looking towards or working towards non-blockchain, zero knowledge?
At O(1) Labs, we are thinking about zero knowledge a bit outside of the blockchain context. We believe that a lot of the initial applications people will build do make more sense in the context of a zero-knowledge-state-layer (which Mina’s blockchain is very well-suited for), but we also intend to make Kimchi+SnarkyJS be a best-in-class tool for zero knowledge applications outside of blockchain too, just in case that makes more sense for your products. We have some ideas about applying but we’re still early here. Keep an eye out for our announcements!
Okay Brandon we got very good answers! Here is the last question; what would you recommend to people who want to improve in zk area? What can they do to make better progress?
To improve in the zk area you first need to decide which part of zk you want to focus on: deep cryptography, designing products,or developing applications. The deep cryptography focus area requires a strong understanding of advanced mathematics to wrap your head around. This is the area that I am not as strong in, but I do have a basic understanding. The best resource that I found for wrapping my head around an older construction of SNARKs is Vitalik’s zkSNARK series Beyond that, to learn more about Mina’s proof system in particular, you can read the Mina book. There are more and more reasonably accessible resources coming out as folks become more interested in zero knowledge, but I’m not too familiar with them. Finally, when you’re more ramped up with the basics, the best way to keep up with what is happening is to follow research papers in this space. I want to stress that it’s not important to understand the deep cryptography details to build interesting products and infrastructure in the zk space.
To design products it is important to have a really good understanding of the capabilities of this technology — the best way to do this is to follow folks building the tools (like O(1) Labs, for example, among others!), keep up to date with presentations from relevant conferences, and talk to other builders.
For developing applications, practice, practice, practice. Start building. We hope you try SnarkyJS and zkApps because we believe these are the best choice for most kinds of zk applications, and these tools try to really make it easy for you to get started, but you can also try other tools as well — the most important thing is to start building. If you don’t know what to build, try to remake examples without looking at the code, or talk to the folks interested in designing products! Good luck everyone!
Follow Brandon:
Twitter: @bkase_
Github: https://github.com/bkase
Türkçe
zkApe: Bu röportajı kabul ettiğin için çok teşekkürler Brandon! zkApe takipçilerine kendinden bahsetmek ister misin? zk alanında çalışmaya başlamadan önce ne yapıyordun? Seni bu alanda heyecanlandıran ne oldu?
Brandon: Herkese merhaba! Background'ım hakkında bilgi verecek olursam: Büyürken bilgisayarlarla ve internetle haşır neşir olduğum için şanslıyım, erken yaşta kendi kendime programlama öğrendim ve yaş aldıkça genel olarak bilgisayar bilimi konularını da öğrenmiş oldum.
Akademik açıdan, Carnegie Mellon Üniversitesi'ne gittim ve oradan Programlama Dili Teorisi üzerine odaklanan bir çalışmayla Bilgisayar Bilimleri bölümünden mezun oldum. Bu çalışma, fonksiyonel programlamadan yoğun bir şekilde yararlanarak endüstride de uygulama gibi bir takıntı haline dönüştü. Facebook ve Mozilla'da stajyer olarak ve bir start-up'ta (Pinterest tarafından satın alındı) ve Pinterest'te tam zamanlı olarak çalışarak sosyal alanda önyüz ve altyapı alanlarında zaman geçirdim - çalışma hayatım boyunca programlama kuramına dair bildiklerimi sürekli işe taşımaya çalıştım ve bu alanda konferanslarda da konuşmalar yaparak topluluğa da duyurmayı hedefledim.
Kripto konusundaysa, Bitcoin'den ilk kez 2009 yılında bir Slashdot paylaşımı sayesinde haberim oldu - O zamanlar Bitcoin node yazılımlarını biraz kurcaladım ama esasında tam anlamıyla 2011 yılında ciddiye almaya başladım ve bir iki yıl kadar Bitcoin madenciliği yaptım. Maalesef, o dönemlerde kazdığım Bitcoinlerin hepsini kaybettim ama kripto alanını sürekli izlemeye devam ettim.
Başlangıçta, bu alanla ilgili beni en çok heyecanlandıran şey bu zorlu teknolojiyle bir şeyler geliştirmekti - 2017'nin sonuna doğru, Evan ve Izaak'la bir projeye katılma fırsatını elde ettim; bunun sonucunda O(1) Labs şirketi ve blok zinciri protokolü Mina doğdu. Bunu kriptoya olan ilgimi, yazılım geliştirmeye akademik bir yaklaşımla birleştirme yolu olarak görüyorum. Başlangıçta, özellikle bu projenin ilgimi çekme nedeni, Mina'nın tekrarlayan (recursive) zkSNARK'ları uygulamasıyla gerekecek mühendislik zorlukları oldu. Mina için, SNARK'lar hakkında akıl yürütme (reasoning) için gömülü bir programla dili geliştirmek zorunda kaldık ve lansmanını bir yıl önce yaptığımız Mina mainnet için güvenli bir proof of stake konsensüs protokolünü tam anlamıyla uygulamaya alan bir dizi zk devresi de geliştirdik - (Mina'nın "22kb blok zincirinin" temelinde bu yatıyor).
Bugünlerde de zk teknolojisinin bu alandaki potansiyel uygulamaları ve daha fazla geliştiricinin zk teknolojisinden faydalanabilmesi için araçlar geliştirme konusu beni heyecanlandırıyor - röportajın ilerleyen bölümlerinde bu konuyu biraz açacağım.
Yaklaşık 6-8 aydır zkApp'ler için geliştirici araçları üzerine odaklanıyorsun. zkApp'in potansiyeli hakkında ne söylemek istersin?
zkApp'lerin potanisyeli beni gerçekten heyecanlandırıyor! Zero knowledge proof uygulamaları geliştirmek zorlu bir iş. Biz de geliştiricilerin işini kolaylaştırmak için, zkApp’leri geliştirme çerçevemiz olan SnarkyJS'yi geliştiriyoruz: SnarkyJS, Typscript kütüphanesi - kullanıcıların yeni bir programlama dili öğrenmesine gerek yok yani. TypeScript kullanmak, 12 milyondan fazla geliştiricinin zaten aşina olduğu bir dil ve araç seti ekosistemi olduğundan dolayı geliştiricilerin JavaScript ve TypeScript kullanarak akıllı kontratlar yazmasına olanak sağlıyor.
Mina'daki zkApp'ler, zincir dışında gizli olarak kullanıcının web tarayıcısında yürütülüyor ve tıpkı Mina'daki bir proof'un blok zincir konsensüs hesaplamasında (computation) olduğu gibi hesaplamada kullanılan bir zero-knowledge proof oluşturuyor.
Yürütme, kullanıcının makinesinde gerçekleştiğinden dolayı kullanıcılar gerçek gizliliğe sahip oluyorlar - verileri asla kendi koruma alanlarının dışına çıkmıyor. Yürütme kullanıcının makinesinde gerçekleştiğinden dolayı, zincir üzeri node'lar yalnızca proof'u doğruladığından dolayı gas ücreti de tahmin edilebilir oluyor. Yürütme kullanıcının makinesinde gerçekleştiğinden ve tekrarlayan proof'un gücü sayesinde, hesaplama gizlilikten veya gas maliyetlerinden ödün vermeden ölçeklenebiliyor!
O(1) Labs'ın üzerinde çalıştığı zkOracles ile (çalışma devam ediyor), web2 kuruluşun API'larında herhangi bir şey değiştirmek zorunda kalmadan web2 verilerini web3'ye taşıyabiliyoruz. Herhangi bir kişisel bilgiyi ifşa etmeden "Gerçek hayattaki fiat banka hesabımda 5.000 dolardan fazla para var," veya hangi Twitter hesabı olduğunu göstermeksizin "Twitter hesabımda 10.000'den fazla takipçim var," gibi kanıtlar (proof) oluşturabilir, bu verileri zincirin üzerine taşıyarak web3 uygulamalarında kullanımına olanak sağlayabiliriz.
Altta yatan proof sisteminin (Kimchi) sınırsız tekrarlama özelliği ve SnarkyJS sayesinde, kullanıcılar yüksek performans gerektiren kullanım alanları için uygulamaya-özel-zk-proof'lar oluşturabilirler. Gizlilikle birleştiğinde, Poker gibi gizli durum gerektiren çok oyunculu oyunları geliştirmek de kolaylaşır.
Nil Foundation'ın üzerinde çalıştığı Mina'nın zkBridge'i (çalışma devam ediyor) sayesinde, Mina'daki zkApp'lerle oluşturulan proof'lar mevcut web3 uygulamalarının becerilerini genişletebilir. Örneğin, bir kullanıcı hakkında hassas herhangi bir veriyi ifşa etmeksizin KYC doğrulaması gerçekleştiren bir zkApp oluşturabilir ve bunu daha sonra transfer edilemez (soulbound) bir NFT olarak bir EVM zincire taşıyabiliriz. Böylece, doğrudan zkApp'leri kullanmaya gerek kalmaksızın Solidity Defi uygulamaları bu bilgiyi kullanarak üzerine geliştirme yapabilir. Ayrıca, üzerinde Mina köprüsü bulunan bütün zincirlere derinden bağlanabilecek şekilde Mina üzerinde kullanıma hazır bir zk-rollup uygulaması da kullanabiliriz.
Chainsafe'in üzerinde çalıştığı tarayıcı tabanlı Mina node uygulamasıyla (çalışma devam ediyor), zkApp'lerle etkileşime geçen kullanıcılar tamamen web tarayıcıları üzerinde çalışan tam anlamıyla merkeziyetsiz ve tam anlamıyla güvenli bir Mina node'u ile bu işlemleri gerçekleştirebilecekler - bu durum, tipik olarak Metamask entegrasyonlarının arkasındaki herkese açık varsayılan bir RPC uç noktasına (endpoint) dayalı web3 uygulamalarıyla etkileşime geçme örneğine bir karşıtlık oluşturuyor. Tarayıcı node'unu kullanarak, kullanıcılar web3'ye gerçekten merkeziyetsiz bir şekilde katılım gösterebilirler.
Bugünlerde, daha fazla geliştirici ve kripto kullanıcısı, eskiye kıyasla zk proof kavramına geliştirme açısından daha fazla dikkat etmeye başladı. zk proof'un temel avantajı nedir?
zk proof'ların temel avantajı, yukarıda bahsettiğim uygulamaları geliştirmemize olanak sağlaması - hatta dahası da var, bu alanda benim veya başkalarının henüz hayalini bile kurmadığı uygulamalara olanak sağlayabilir! Gizlilik ve zincir dışı yürütme sayesinde artık neredeyse her şey mümkün. Biz de SnarkyJs ve zkApp'lerin, hayal edilebilecek her şeyi yerine getirmeey aracılık edeceğini umuyoruz (yetersiz kalırsa da bize geri bildirim verin ki düzeltebilelim).
Zero knowledge'ın blok zinciri uygulamalarına odaklanma eğilimindeyiz. Hep bu kesişimdeydi ama bir veya iki örnek verebilirim. Blok zincir dışındaki zero knowledge konusuna nasıl bakıyorsun veya nasıl çalışıyorsunuz?
O(1) Labs'de, zero knowledge'ı biraz blok zincir bağlamının dışında değerlendiriyoruz. İlk geliştirilecek uygulamaların, zero-knowledge-state-katmanı bağlamında daha anlamlı olacağına inanıyoruz (ki Mina block zinciri bu iş için gayet uygun); ancak Kimchi+SnarkyJS'yi de diğer ürünler için de anlamlı olabilmesi açısından blok zincir dışındaki zero knowledge uygulamaları için sınıfının en iyi aracı haline getirmeyi hedefliyoruz. Uygulamaya dair aklımızda birkaç fikir var ama bunlar için henüz erken. Yapacağımız duyuruları takipte kalın!
Süper Brandon, çok iyi yanıtlar aldık! Şimdi son sorumuza gelelim. Zk alanında kendini geliştirmek isteyenlere ne önerirsin? Bu alanda ilerlemek için neler yapabilirler?
ZK alanında kendini geliştirmek için önce zk'nın hangi yönüne odaklanacağına karar vermeli: derin kriptografi, ürün tasarımı veya uygulama geliştirme. Derin kriptografinin odak alanı, ileri matematik konusunda sağlam bir bilgi birikimi gerektiriyor. Bu benim çok da güçlü olmadığım bir alan, temel bilgiye sahibim. SNARK'ların eski bir yapısı konusunda benim en kavrayabildiğim en iyi kaynak, Vitalik'in zkSNARK serisiydi. Onun ötesinde, özellikle Mina'nın proof sistemi hakkında bilgi almak için Mina book'u da okuyabilirsiniz. Zero knowledge konusu çoğunluğun ilgisini çekmeye başladığından dolayı daha makul erişilebilir kaynaklar da ortaya çıkıyor ama ben pek aşina değilim. Son olarak, temel bilgileri edindikten sonra alanda neler olup bittiğini takip etmenin en iyi yolu, yayınlanan araştırma makalelerini takip etmek. zk alanında ilgi çekici ürünler ve altyapılar geliştirmek için derin kriptografinin ayrıntılarını anlamanın çok da önemli olmadığını da vurgulamak isterim.
Ürün tasarlamak için, bu teknolojinin becerilerini gerçekten iyi anlamak önemli - bunun en iyi yolu ise araçlar geliştiren insanları takip etmek (örneğin O(1) Labs gibi), ilgili konferanslarda yapılan sunumları takip etmek ve diğer geliştiricilerle konuşmak.
Uygulama geliştirmek içinse; pratik, pratik, pratik. Geliştirmeye başlayın. SnarkyJS'yi ve zkApp'leri denemenizi istiyoruz; çünkü bunların zk uygulamalarının çoğu için en iyi seçenek olduğuna inanıyoruz ve bu araçlar gerçekten başlangıçta işleri kolaylaştırmaya çalışıyor. Tabii başka araçları da deneyebilirsiniz - en önemli şey, geliştirmeye bir yerden başlamak. Ne geliştireceğinizi bilmiyorsanız da koda bakmadan mevcut örnekleri yeniden yapmaya çalışın ya da ürün tasarımıyla ilgilenen insanlarla konuşun! Herkese bol şans!
Brandon'ı takip edin:
Twitter: @bkase_
Github: https://github.com/bkase