DappCon 2023: Gno.land: The key to perpetual transparency - Manfred Touron
DappCon 2023 · September 2023 · 28:47
A talk from Manfred Touron at DappCon 2023 introducing Gno.land, a platform built around Gno, an interpreted variant of the Go programming language. The talk positions Gno.land as a way to make on-chain logic more transparent than typical compiled smart contract bytecode.
Speakers
Topics
From DappCon 2023, hosted by Dappcon Berlin.
Transcript
hi everyone um today we'll speak about Gand which is not gnosis Gand is a new ecosystem in the cosmos IBC IBC ecosystem of interconnected blockchains it specialized on Smart Contracting and I will speak about what we plan to do not technically but what it will bring so new open source Paradigm and U I will speak about open source but it goes beyond it's about gitlab GitHub git open source software Etc so first what is gno gno is a new smart Contracting ecosystem including um
blockchain Noland a language G um VM GM and a set of tools so that you can build your contract you can run new blockchains not a single one you can deploy your own gnov VM based Shain and interact uh both internally and between blockchains it was created by J K the co-founder of Cosmos and cocreator of tender Min um and it's um it's still in test net sorry but yeah it's a it's an L1 that you can reuse right now that will be deployed later this year or next at the beginning of next year with a goal to launch new blockchains uh by yourself and also let people Bo up their
own chain and interconnect them together it's built on tender 2 a new Evolution of tender Min which is way more simple um built to create very long-term blockchains so blockchains for 20 50 or 100 years with a very low maintenance and it secured by proof of contribution which is a new algorithm so like proof of stake but replacing Finance with um the contribution um so yeah it's designed a lot about simplicity uh finishing product and having things you can use without any fear of deprecation or ey maintenance it integrates g web which is a way to write daps without requiring an
external server so that it's not just about providing the API for wallets but also providing ways for your users to read interact and um yeah just see the contract as on the web so so one of the main things that allow us to consider that we can change a little bit how open source will work is because the language itself is a multi-user language which is clearly a new paradigm and it's mainly due because we are interpreting the scripts interpreting the contract interpreting the programs so instead of writing on your computer publishing on GitHub then
compiling to a bite code that you publish on a chain you publish your contract your libraries everything and they are both usable as a wallet with a wallet in terms of interaction but also importable by other contracts so each time you create a new contract it's available as a as an application like an app store and as a library so that people can use your contract it source code is structures its state and interact with it um the goal is is to create a multiuser programming language that also works outside of a blockchain but the main goal of having a such a system is to have the the highest level of trust
which goes in pair with having a blockchain be but basically the language is multiuser and with a blockchain it creates like an open source concept where you can only create new knowledge new features for you your users and the rest of the developers the main difference between a multiuser programming language and smart contract or systems interacting like microservices is the fact that you don't upload the bite code but the source and the source is importable so instead of having to call an address and provide some primitive types parameters you import the the other contract you can use whatever you want in the same
language you can use structures nested structures arrays new types you can also use the state the data of the of the what of what you call uh and you can interact with it if you if an help per you call is changing the imported contract the state will be persisted in the uploaded contract and for instance the source code you can see is about importing um jc20 an equivalent of erc20 that manag just balances and addresses and uh users which is an equivalent of ens and this contract which was uploaded after uh provides onchain support to to to transfer tokens to an undle to a username and here we just import the the
contract you can use the method the type structures the pointers whatever you want and U as you can see we can also look up using the world ens State the data and you can also interact with F20 to transfer the data to change the balance and by doing this you have Imports and then you make as many uh interaction you want it's not about making an expensive call or 10 expensive call it's about making a single import and making potentially thousands of of of queries or rights so another concept of multiuser programming is uh the fact that you
don't upload binaries but source so instead of interacting with an API um Facebook AWS whatever Twitter and sometimes have the source code on GitHub so two different systems here you always have access to the source code so it's not possible to not do open source actually it's about publishing the source code usable by wallets by other libraries and programs but also just for users to discover so something very common for developers on GitHub on GitHub you discover a project you read the readme you can inspect the source code and it's a discovery process and we bring the same you explore your blockchain your DBS and you can read the source code read the Imports you can
navigate between the Imports you can have all the data as as on GitHub you can see the dependencies and consider if you can trust them or not so yeah by doing this you just make access to the source code um monitary meaning that you don't need to provide um a decompiled version of your bite code an ipfs link whatever it's the same process you don't switch from GitHub to the DB to the production or from from the production to the DAP to to GitHub sorry it's about being in the same bubble and Noland so it will be one of the chains running GM but it will be special because we want it to store most of the good quality libraries and apps
that you can use in the G ecosystem so this is more an application responsibility more than a technical responsibility any gvm chain can have contracts but we want to promote this chain to host like GitHub host the source code like npm all the libraries on JavaScript we want Gand to be the chain owning all the good quality contracts that you can import on any chain or onland by doing this um we want to give actually the same effect as GitHub today when you want to start a new project and you depend on I don't know you want want to interact with Twitter or my SQL or whatever you will look for your library for your for a dependency to import and
we want to give the same where you can explore shoes um and just yeah pick the best dependency you want and once again still by staying in the same ecosystem it's not the source on one side the production on another it's the same system you navigate it's a loop you navigate you like you for you compose you you read you you write you you extend what ever and yeah by doing this it's about having this Loop like you are on a contract you like something you want to automate you write to shell script no it's actually you write your own small contract just to interact your way with a contract instead of making wallet transactions so by doing this we want to
give many many more uh metadata information so high level of transparency making switching back to other web through ecosystem or even web two looks like I miss something I miss the source code I miss the proof that the deployed version is the same version as a good version of giab so yeah it's unified and it makes a huge difference um as as for GitHub or other project like radical Etc the goal is to also bring the social aspect of GitHub so not only the code but who are the authors the organizations um seeing um yeah a network between see following people trusting People based on their history
so all the social aspect of GitHub which goes far beyond just s Cod sharing [Music] um so yeah if you remember there Aral of GitHub it didn't create open source open source was existing before but if today you remove GitHub gitlab Etc open source will be way harder it will be less smooth the goal is to um just create a similar uh similar effect where we don't invent open source we don't invent a smart contract we don't invent execution or whatever but by putting putting them together it's an unified experience and when you leave this you always feel oh maybe maybe the source code is outdated
or I need to trust a developer a company um an infrastructure so yeah the goal is to make a A to Z um trust chain you can trust the execution the source and everything the goal is to um to to also provide something additional um GitHub is about sharing source code and production is about having the produ the execution and the state on gab you don't have the state the goal is to provide a new way where the state of a program the data is as open as open source software maybe some data are private to a contract meaning that you cannot as a non admin
um update them but um the thing is about it's always possible to get the these data with an with an indexer or whatever so here we want to unify source code and state you can read whatever private variable you want you can synchronize everything locally so you can just maybe create a new contract depend on ens but already have all the ens State locally when you develop so you create an ens from day one it's available as as an ens connect for everyone every developers and you can do this for everything you just don't ship features you ship features and state so yeah by doing this um by
providing Source Code by default State and by being around a new language something we can do is to provide the usual way of interacting with smart contract with wallets and clients we can provide um new way for discovering contract reading contract auditing contract thanks to the source code but um since we are around a new language since we can um since we interpret everything and we can import something we can also create a wallet which won't be just about calling a method with parameters but about executing arbitrary code as you were a contract it's a you are a contract except you don't persist yourself on the Chain you just have an
address which is known you have your assets but you can can basically have a shell which is pure programming language you import something you print the value you interact with it and each time it's about writing it will create a transaction each time it's about reading it will just um get the data without any transaction um sorry let's thing about um transparency the goal is to um name everything instead of having ZX something for the contract for the users we want users to be able to have unle they can keep they can stay Anonymous but they can un reserve a unle and they can publish their contract with the unel like on
GitHub and a last important part of nland is that it will run proof of contribution which is technically something everyone can run but it's harder to run than proof of stake you don't have to just find validators to your network you need to invest time and energy to monitor who are the contributors during the build phase so we will do it thanks to interconnectivity proof of contribu to Pro of contribution yes sorry Pro of contribution and its Dow will be available for other chains so you can expect to have a rable um Financial independent consensus and DOW that you can run everywhere but yeah thanks to this proof of contribution we want not only to um to change the the target of
the of the rewards to not only financial people but also contributors we want to give money to good contract developers we want to create something where open Building open source is good building good open source can pay your your bills so the goal is to promote something where it's not us it's not a grunt it's just the the community will use your good code and by using your good code you will be rewarded so yeah we want to promote something where the chain is protected by this by its contributor it's owned and secured by proof of contribution but also as a developer which is not developing blockchains but just contracts you can expect to earn rewards by writing good
Cod um and so it's not just about a language it's a Reinventing the open source so the concept of Open Source was to share just the source here we want to add the state and the execution and also we want to break this concept of splitting on one side we have G GitHub and the development then you build and then you have the production world we want to make something where you have a short Loop you use the contract you want to change something automate for your own need you want to Fork the contract or whatever it's the same loop on the same system so it's about on a daily basis creating small script small extension without too much pressure because it's
more about writing a shell script it's not about making a huge new application and audit for months so yeah it's about having the same open source ethod but for including the execution the trust and sharing everything like in open source so it's about amplifying open source we don't want to compete we still need open source and standard open source as as of today but we want to create an additional um open source ecosystem on the side where you still push code it's not repository it's contract where every day you have a portfolio which is growing and where every day you can um yeah enrich your
own account your own developer portfolio your own network of trusted people so every day is about it's yesterday but better um yeah sorry um and the goal is to basically try to do the same effect uh GitHub made by not by transforming something which was existing the open source was existing but G up Chang it a lot we want to make basically the same where um when you when you leave Gand you feels like I I'm not sure about everything I need to synchronize the data I need to trust I need to verify ET no we want to make something more live
you have all the data you you use you Fork you edit it's about a live experience so yeah um before GitHub after GitHub want to make the same before Noland after Noland so it's about bringing more social stuff to Smart contract more transparency more trust um putting the developers um and the contributors in front of the public with more rewards with a name with a social profile portfolio of what they are doing um yeah sorry I already said this so basically create a loop with which is
clearly what I want to to insist because it's not just about technical stuff or a longu age it's about the loops you have with open source but for forcing you to switch between what you see on your browser finding the project on GitHub forking publishing somewhere else it's about creating a shorter shorter shorter Loop encouraging to have open source and without the option to create closed Source stuff so maybe you won't be compatible if you want to keep secrets but if you embrace the extreme transparency concept of web 3 that come that can come with web 3 this will this will be potentially the best ecosystem so we are currently in test net you can join us to try to use or to
help us finish the project we currently have a game of frames competition which is a way to um both contribute earn points right now on rewards in atom and the day we will release a maget you will be in the Genesis as a of the evaluation Dow um which is actually the one who will own the blockchain so by contributing right now you can help us start earning re uh points convert the points into reward and but keep them for the Genesis and to finish feel free to check out the GitHub the website and help us create game of frames both by participating or extending the competition and contribute thank
you thank you man Manfred uh that was uh informative uh guys anybody has any questions yes so I'll give it to you hi yeah thank you for the talk uh could you elaborate a bit on how Pro of contribution works like my concern is if we're rewarded based just a number of commits it encourages low low value commits uh but if we want to uh judge the quality that's kind of not very automatable it requires human judgment how do you approach this issue so that's the Bold thing evalation Dow the evalation Dow
will be the thing allowing us to give points without relying on the dictator so basically we want to Dow where where people are owning the blockchain and giving so sharing their own points or deleting themselves by giving points to new contributors and by doing this they will basically delute themselves and receive less rewards over time but they will protect the blockchain so we replace the dictator the one allocating points with a DA and you have a basically standard system like in open source where you have leaders approving commits so it will be different you can have commits on one side and then there is like a forum where you discuss and you try to
negotiate I want more point less Point your committee is use useless Etc it can be automated but by default it's a free it's about discussing yeah um in terms of uh putting the code up to the nodes um are you compiling it then on your end or is it like just in time compiled it's interpreted we have a proof of concept uh we have two proof of concept uh with a different interpreter and with something creating some bite code at the last moment but by default right now the we we pass the go the g code we have an go and the g is executed
right directly without a bite code so do you provide a version then I'm just seeing it's like three years down the line and you're on version four of your compiler and like safe math happened in solidity um like how would you guarantee that the bike code that you uh that you write just in time is the same bike code like 45 years from now when no one has the old compilers so there is no bait code except in one proof of concept and this bait code is deterministic but with the CR main run time we don't have B code and it's deterministic the language is deterministic and the GM is basically configuring the language so that the execution is deterministic for instance the map can be random but with un with always the same seed which is decided in
a consensus R so at the end everything is deterministic in the language both the part um and the world execution from A to Z okay so it's like like in ja like on Chrome it's like V8 or whatever for JavaScript so like when you go from V8 to v9 for example it's guaranteed to be the exact same program you're running yeah and that's why it's a new language actually it's based on go it looks like go but it's not go it's go for web3 it's it's a deterministic go interpret it go it does not exist out of there and uh so it have some constraints right now we don't have routine yet we plan to have them later but at the end it's a new language that is just compatible with the with the same
passing okay and um I guess quickly um console.log or print line can you print every single type um not not all the types most of them and as soon as you create structures with yeah basically most of them thank you oh good um just I assume because you have this comparison to GitHub so that um I have comets and updates to the libraries or the contracts that are published so does that mean that all contracts are upgradable by default and how do you handle the versioning if I want to import an older version of the library that is out there and not the
new one because I'm not happy with the changes or whatever right now we don't have vering um buil-in method so we have good practices uh we have't plan to create migration features or visioning oriented features right now we want people to be able to make crappy work but we also encourage people to basically create good libraries and we have uh a distinction between libraries only and uh applications so basically we have an app store and npm and the npm thing will never have a way to version your stuff if you want to version it's you you just name it V1 V2 V3 because we consider that the dependency you use right now it
can have new features but if it has a bug the goal is not just to update the dependency it's to maybe update it and redeploy your new contract so we we'll have migration features for the applications people can use and we consider the Library part like a pure stuff it's pure it's there you use it or you don't use it but we don't plan to have versioning inside it's it's about encouraging to have smaller things audit them and or maybe wait for them to be used for years before using them so when you deploy a contract these libraries get all bundled with it together and not referenced and then downloaded by the note sorry if you if you deploy a contract that Imports a library or an app or so it gets bundled in together and then published with the app within
the code or does every time when this contract gets executed it gets the app from the library no when you upload something we will verify all the Imports so if you contract import librar they need to be uploaded before uh and libraries can only import libraries it's the pure World stay pure the application world can import other applications or pure libraries um and maybe it will change but right now we yeah we want to have one world which is about providing new features update for the users and one world like npm but where each version stay forever and maybe you can deprecate it but we won't remove it we won't change we won't patch the source code without asking okay thanks
just for Clarity on that like the difference between npm and pnpm is that it basically links to a cache of like the the library that you're importing and so it just wasn't clear to me that um like are you just in time importing the library or are you just like basically making copies of the same code uh for every single one so just for this here uh each blockchain should have the code locally when we have multi-chain one of the new code will create is fetch Source through the consensus through web3 uh to just fetch local The Source right now the plan is to have multi-chain mostly for source and maybe later for data transfers so to create like microservices around multiple blockchains right now we want to focus
on you have good source code you want to import it it will be cached Forever on the new blockchain the import path will look like the other blockchain but technically it will be a local version the goal um when I put the example with the two Imports the goal is to um prepare the VM load everything and then if the load was successful we execute so when you have a micros service when you have a call on ethereum it can fail you can have a failure when you when you try to call an address that does not exist for instance or microservice you need to open a socket GPC whatever here we import all the source code rest of the state and then
we execute there is no you you you don't have if import was successful you don't have if my call was successful the call can fail if the logic returns an error but here we import everything we load everything and then we execute so you need to have everything locally before launching okay so so and just so that we can make bite code later right now we have something without bite code and maybe at some point we have optimizations with bite code just in time or other own times but by Def we don't need by default we have only source code okay so uh sorry uh so in very simple terms how does it differentiate from radical or
gpia so we are not a git provider the common point is the thing about providing more than the source code with social features metadata but it here we have a production it's like you mix ethereum with GitHub so not GitHub in web three you mix the execution part the transactions the relationship between yeah basically the blockchain and the source code together and you also have this part of um um basically the social aspect of GitHub with the source code with the execution so it's not just about changeing source code it's about by default you execute something and then oh you have an option
to see the source to Fork to do all the stuff you do on GitHub but it's mainly a production system an execution system it provides the git features as a bonus which is actually bonus we cannot remove from the project but it's mainly a production system great uh all right uh thank you everyone thank you Manfred uh