+
+### Build with Gnolang
+
+- [Gno dev with CLI (soon)](#)
+- [Explore the Universe](/ecosystem)
+- [Test in the browser (soon)](#)
+- [About the Gnolang Language](/gnolang)
+- [Docs/ Tutorials](https://github.com/gnolang)
+- [Gno by example](https://gno-by-example.com/)
+- [Getting started video (soon)](#)
+
+
`),
+ }
+}
diff --git a/examples/gno.land/r/gnoland/home/home_filetest.gno b/examples/gno.land/r/gnoland/home/home_filetest.gno
new file mode 100644
index 00000000000..1fffc11792f
--- /dev/null
+++ b/examples/gno.land/r/gnoland/home/home_filetest.gno
@@ -0,0 +1,188 @@
+package main
+
+import "gno.land/r/gnoland/home"
+
+func main() {
+ println(home.Render(""))
+}
+
+// Output:
+// # Welcome to Gno.land
+//
+// ### An interpretation of the Golang (Go) programming language for advanced developers and intrepid pioneers to build succinct, composable smart contracts for social coordination.
+//
+//
+// If you’re concerned about information censorship and want to contribute to the #GnoWorldOrder, follow our socials to find out how.
+//
+//
+// Gno.land is in building mode. If you want to help lay the foundations of a fairer and freer world through innovative ideas and exceptional code, join us today.
+//
+//
+//
+// ### Build with Gnolang
+//
+// - [Gno dev with CLI (soon)](#)
+// - [Explore the Universe](/ecosystem)
+// - [Test in the browser (soon)](#)
+// - [About the Gnolang Language](/gnolang)
+// - [Docs/ Tutorials](https://github.com/gnolang)
+// - [Gno by example](https://gno-by-example.com/)
+// - [Getting started video (soon)](#)
+//
+//
+//
+// ### Quote of the ~Day~Block#123
+//
+// > Now, you Gno.
+//
+//
+//
+//
+//
+// ---
+//
+// **This is a testnet.**
+// Package names are not guaranteed to be available for production.
diff --git a/gno.land/cmd/gnoweb/pages/ABOUT.md b/examples/gno.land/r/gnoland/pages/page_about.gno
similarity index 73%
rename from gno.land/cmd/gnoweb/pages/ABOUT.md
rename to examples/gno.land/r/gnoland/pages/page_about.gno
index a5678a7349a..9aba4e39f76 100644
--- a/gno.land/cmd/gnoweb/pages/ABOUT.md
+++ b/examples/gno.land/r/gnoland/pages/page_about.gno
@@ -1,4 +1,10 @@
-# About Gno.land
+package gnopages
+
+func init() {
+ path := "about"
+ title := "Gno.land Is A Platform To Write Smart Contracts In Gnolang (Gno)"
+ // XXX: description := "On Gno.land, developers write smart contracts and other blockchain apps using Gnolang (Gno) without learning a language that’s exclusive to a single ecosystem."
+ body := `# About Gno.land
Gno.land is a platform to write smart contracts in Gnolang (Gno).
Using an interpreted version of the general-purpose programming language Golang (Go), developers can write smart contracts and other blockchain apps without having to learn a language that’s exclusive to a single ecosystem.
@@ -9,4 +15,6 @@ Proof of Contribution rewards contributors from technical and non-technical back
This consensus mechanism also achieves higher security with fewer validators, optimizing resources for a greener, more sustainable, and enduring blockchain ecosystem.
Any blockchain using Gnolang achieves succinctness, composability, expressivity, and completeness not found in any other smart contract platform.
-By observing a minimal structure, the design can endure over time and challenge the regime of information censorship we’re living in today.
+By observing a minimal structure, the design can endure over time and challenge the regime of information censorship we’re living in today.`
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/page_ecosystem.gno b/examples/gno.land/r/gnoland/pages/page_ecosystem.gno
new file mode 100644
index 00000000000..68969c44529
--- /dev/null
+++ b/examples/gno.land/r/gnoland/pages/page_ecosystem.gno
@@ -0,0 +1,35 @@
+package gnopages
+
+func init() {
+ var (
+ path = "ecosystem"
+ title = "Discover Gno.land Ecosystem Projects & Initiatives"
+ // XXX: description = "Dive further into the Gno.land ecosystem and discover the core infrastructure, projects, smart contracts, and tooling we’re building."
+ body = `# Gno Ecosystem
+
+## Gno.land Space
+
+For the best onboarding experience, head over to [Gno.land Space](https://www.gnoland.space/) open ecosystem. Here you can set up your Gno wallet, explore existing community-written Gno smart contracts (realms), and become part of our vibrant community by joining [Gno.land Discord](https://discord.com/invite/x76qK4ttHC).
+
+## Gno Studio (IDE)
+
+Gno IDE is a web-based application helping builders quickly spin up Gno realms and packages right on their browsers. Offering a smooth and intuitive UX for building on Gno, you’ll find multiple modes for customizability with all the features you’d expect from an IDE, such as auto compilation in the editor, debugging, and extensive testing capability.
+
+## Gnoscan
+
+Developed by the Onbloc team, Gnoscan is Gno.land’s blockchain explorer. Anyone can use Gnoscan to easily find information that resides on the Gno.land blockchain, such as wallet addresses, TX hashes, blocks, and contracts. Gnoscan makes our on-chain data easy to read and intuitive to discover. [Go to Gnoscan.](https://gnoscan.io/)
+
+## Adena
+
+Adena is a user-friendly non-custodial wallet for Gno.land. Open-source and developed by Onbloc, Adena currently powers all transactions on Gno.land, allowing gnomes to interact easily with the chain. With an emphasis on UX, Adena is built to handle millions of realms and tokens with a high-quality interface, support for NFTs and custom tokens, and seamless integration. [Get started here.](https://adena.app/)
+
+## Gnoswap
+
+Gnoswap is currently under development and led by the Onbloc team. Gnoswap will be the first DEX on Gno.land and is an automated market maker (AMM) protocol written in Gnolang that allows for permissionless token exchanges on the platform.
+
+## Gno.land Developer Portal
+
+Through the Gno.land Developer Portal, new developers can explore the exciting world of Gnolang (Gno), a novel programming language that powers the Gno.land blockchain. If you want to interact with Gno.land, start writing a realm, build a dApp, or even port a Solidity contract to a Gnolang realm, you’ll find the resources to [get started here](https://docs.onbloc.xyz/).`
+ )
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/page_events.gno b/examples/gno.land/r/gnoland/pages/page_events.gno
new file mode 100644
index 00000000000..18e7faeb3d3
--- /dev/null
+++ b/examples/gno.land/r/gnoland/pages/page_events.gno
@@ -0,0 +1,151 @@
+package gnopages
+
+func init() {
+ var (
+ path = "events"
+ title = "Gno.land Core Team Attends Industry Events & Meetups"
+ // XXX: description = "If you’re interested in learning more about Gno.land, you can join us at major blockchain industry events throughout the year either in person or virtually."
+ body = `# Events
+
+If you’re interested in building web3 with us, catch up with Gno.land in person at one of our industry events. We’re looking to connect with developers and like-minded thinkers who can contribute to the growth of our platform.
+
+---
+
+## Upcoming Events
+
+
+
+
+### EthCC
+
+- **Come Meet Us at our Booth**
+- Paris, July 17 - 20, 2023
+- Manfred Touron
+
+[Learn more](https://www.ethcc.io/)
+
+
+
+### GopherCon EU
+
+- **Come Meet Us at our Booth**
+- Berlin, July 26 - 29, 2023
+
+[Learn more](https://gophercon.eu/)
+
+
+
+
+
+### GopherCon US
+
+- **Come Meet Us at our Booth**
+- San Diego, September 26 - 29, 2023
+
+[Learn more](https://www.gophercon.com/)
+
+
+
+
+---
+
+## Past Events
+
+
+
+
+
+### Eth Seoul
+
+- **The Evolution of Smart Contracts: A Journey into Gno.land**
+- Seoul, June 3, 2023
+- Manfred Touron
+
+[Learn more](https://2023.ethseoul.org/)
+
+
+
+
+### BUIDL Asia
+
+- **Proof of Contribution in Gno.land**
+- Seoul, June 6, 2023
+- Manfred Touron
+
+[Learn more](https://www.buidl.asia/)
+
+
+
+
+### Game Developer Conference
+
+- **Side Event: Web3 Gaming Apps Powered by Gno**
+- San Francisco, Mach 23, 2023
+- Jae Kwon
+
+[Watch the talk](https://www.youtube.com/watch?v=IJ0xel8lr4c)
+
+
+
+
+### EthDenver
+
+- **Side Event: Discover Gno.land**
+- Denver, Feb 24 - Mar 5, 2023
+- Jae Kwon
+
+[Watch the talk](https://www.youtube.com/watch?v=IJ0xel8lr4c)
+
+
+
+
+### Istanbul Blockchain Week
+
+- Istanbul, Nov 14 - 17, 2022
+- Manfred Touron
+
+[Watch the talk](https://www.youtube.com/watch?v=JX0gdWT0Cg4)
+
+
+
+
+### Web Summit Buckle Up and Build with Cosmos
+
+- Lisbon, Nov 1 - 4, 2022
+- Manfred Touron
+
+
+
+### Berlin Blockchain Week Buckle Up and Build with Cosmos
+
+- Berlin, Sept 11 - 18, 2022
+
+[Watch the talk](https://www.youtube.com/watch?v=hCLErPgnavI)
+
+
+
`
+ )
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/page_gnolang.gno b/examples/gno.land/r/gnoland/pages/page_gnolang.gno
new file mode 100644
index 00000000000..f0c2bfe276d
--- /dev/null
+++ b/examples/gno.land/r/gnoland/pages/page_gnolang.gno
@@ -0,0 +1,43 @@
+package gnopages
+
+func init() {
+ var (
+ path = "gnolang"
+ title = "Gnolang (Gno) Is a Complete Language for Blockchain"
+ // XXX: description = "Gnolang (Gno) is an interpretation of the popular Golang (Go) language for blockchain created by Tendermint and Cosmos founder Jae Kwon."
+ body = `# About the Gnolang, the Gno Language
+
+[Gnolang](https://github.com/gnolang/gno/blob/master/LICENSE.md) (Gno) is an interpretation of the widely-used Golang (Go) programming language for blockchain created by Cosmos co-founder Jae Kwon in 2022 to mark a new era in smart contracting. Gno is ~99% identical to Go, so Go programmers can start coding in Gno right away, with a minimal learning curve. For example, Gno comes with blockchain-specific standard libraries, but any code that doesn’t use blockchain-specific logic can run in Go with minimal processing. Libraries that don’t make sense in the blockchain context, such as network or operating-system access, are not available in Gno. Otherwise, Gno loads and uses many standard libraries that power Go, so most of the parsing of the source code is the same.
+
+Under the hood, the Gno code is parsed into an abstract syntax tree (AST) and the AST itself is used in the interpreter, rather than bytecode as in many virtual machines such as Java, Python, or Wasm. This makes even the GnoVM accessible to any Go programmer. The novel design of the intuitive GnoVM interpreter allows Gno to freeze and resume the program by persisting and loading the entire memory state. Gno is deterministic, auto-persisted, and auto-Merkle-ized, allowing (smart contract) programs to be succinct, as the programmer doesn’t have to serialize and deserialize objects to persist them into a database (unlike programming applications with the Cosmos SDK).
+
+## How Gno Differs from Go
+
+![Gno and Go differences](static/img/gno-language/go-and-gno.jpg)
+
+The composable nature of Go/Gno allows for type-checked interactions between contracts, making Gno.land safer and more powerful, as well as operationally cheaper and faster. Smart contracts on Gno.land are light, simple, more focused, and easily interoperable—a network of interconnected contracts rather than siloed monoliths that limit interactions with other contracts.
+
+![Example of Gno code](static/img/gno-language/code-example.jpg)
+
+## Gno Inherits Go’s Built-in Security Features
+
+Go supports secure programming through exported/non-exported fields, enabling a “least-authority” design. It is easy to create objects and APIs that expose only what should be accessible to callers while hiding what should not be simply by the capitalization of letters, thus allowing a succinct representation of secure logic that can be called by multiple users.
+
+Another major advantage of Go is that the language comes with an ecosystem of great tooling, like the compiler and third-party tools that statically analyze code. Gno inherits these advantages from Go directly to create a smart contract programming language that provides embedding, composability, type-check safety, and garbage collection, helping developers to write secure code relying on the compiler, parser, and interpreter to give warning alerts for common mistakes.
+
+## Gno vs Solidity
+
+The most widely-adopted smart contract language today is Ethereum’s EVM-compatible Solidity. With bytecode built from the ground up and Turing complete, Solidity opened up a world of possibilities for decentralized applications (dApps) and there are currently more than 10 million contracts deployed on Ethereum. However, Solidity provides limited tooling and its EVM has a stack limit and computational inefficiencies.
+
+Solidity is designed for one purpose only (writing smart contracts) and is bound by the limitations of the EVM. In addition, developers have to learn several languages if they want to understand the whole stack or work across different ecosystems. Gno aspires to exceed Solidity on multiple fronts (and other smart contract languages like CosmWasm or Substrate) as every part of the stack is written in Gno. It’s easy for developers to understand the entire system just by studying a relatively small code base.
+
+## Gno Is Essential for the Wider Adoption of Web3
+
+Gno makes imports as easy as they are in web2 with runtime-based imports for seamless dependency flow comprehension, and support for complex structs, beyond primitive types. Gno is ultimately cost-effective as dependencies are loaded once, enabling remote function calls as local, and providing automatic and independent per-realm state persistence.
+
+Using Gno, developers can rapidly accelerate application development and adopt a modular structure by reusing and reassembling existing modules without building from scratch. They can embed one structure inside another in an intuitive way while preserving localism, and the language specification is simple, successfully balancing practicality and minimalism.
+
+The Go language is so well designed that the Gno smart contract system will become the new gold standard for smart contract development and other blockchain applications. As a programming language that is universally adopted, secure, composable, and complete, Gno is essential for the broader adoption of web3 and its sustainable growth.`
+ )
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/page_gor.gno b/examples/gno.land/r/gnoland/pages/page_gor.gno
new file mode 100644
index 00000000000..3a6bb022e09
--- /dev/null
+++ b/examples/gno.land/r/gnoland/pages/page_gor.gno
@@ -0,0 +1,221 @@
+package gnopages
+
+func init() {
+ path := "gor"
+ title := "Game of Realms Content For The Best Contributors"
+ // XXX: description := "Game of Realms is the first high-stakes competition held in two phases to find the best contributors to the Gno.land platform with a 133,700 ATOM prize pool."
+ body := `# Game of Realms
+
+
+
+### Game of Realms
+
+The first high-stakes contest will see participants compete for tiered membership to co-own the Gno.land blockchain. A series of complex technical and non-technical tasks will challenge contributors to create innovative patterns that push the chain to new limits. Start building the foundation for tomorrow through key smart contracts and other contributions that change our understanding of the world.
+
+
+
+The competition is currently in phase one – for advanced developers only.
+
+Once the necessary tools to start phase two are ready, we’ll open up the competition to newer devs and non-technical contributors.
+
+If you want to stack ATOM rewards and play a key role in the success of Gno.land and web3, read more about Game of Realms or open a [PR](https://github.com/gnolang/gno/) today.
+
+
+
+
+
+
+
+## Phase I. (ongoing)
+
+-
+
+-
+
+-
+
+
+
+
+## Phase II. (Locked)
+
+
+
+
+
+
+
+
+
+## Evaluation DAO
+
+This complex challenge seeks your skills in DAO development and implementation and is one of the most important challenges of phase one. The Evaluation DAO will ensure that contributions in Game of Realms and the Gno.land platform are fairly rewarded.
+
+
+
+
+
+
+
+
+
+
+
+
+Game of Realms participants and core contributors are still in discussions, proposing additional ideas, and seeing how the proposal for the Evaluation DAO evolves over time.
+
+
+
+
+
+
+
+See [GitHub issue 519](https://github.com/gnolang/gno/issues/519) for the most up-to-date discussion so far on how voting should work for the DAO, what the responsibilities are, how to join, etc.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Tutorials
+
+To progress to phase two of the competition, we need high-quality tutorials, guides, and documentation from phase one participants. Help to create materials that will onboard more contributors to Gno.land.
+
+
+
+
+
+
+
+
+
+
+
+
+How to create, present, and house the tutorials has been established with productive discussions between core contributors and external participants.
+
+
+
+
+
+
+
+We followed a collaborative approach to defining the scope of the work and creating a series of tutorials and videos, Gno by Example, to explain core concepts and show newcomers how to write in the Gno programming language. Gno docs and tutorials will be community-run so that anyone can contribute. Onbloc’s [developer portal](https://docs.onbloc.xyz/) is an excellent onramp to Gno.land currently. We will soon be releasing a documentation instance to house all tutorials.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Governance Module
+
+Can you define and implement a governance contract suite that rivals existing ones, such as the Cosmos Hub? Show us how! We’re looking for the fairest and most efficient governance solution possible.
+
+
+
+
+
+
+
+
+
+
+
+
+Game of Realms participants and core contributors have made significant progress teaming up to complete this challenge but discussions and additional ideas are still ongoing.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Register Now
+
+
+
+
+
+
+`
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/page_partners.gno b/examples/gno.land/r/gnoland/pages/page_partners.gno
new file mode 100644
index 00000000000..440302437fa
--- /dev/null
+++ b/examples/gno.land/r/gnoland/pages/page_partners.gno
@@ -0,0 +1,21 @@
+package gnopages
+
+func init() {
+ path := "partners"
+ title := "Partners"
+ // XXX: description := """
+ body := `## Partnerships
+
+### Fund and Grants Program
+
+Are you a builder, tinkerer, or researcher? If you’re looking to create awesome dApps, tooling, infrastructure, or smart contract libraries on Gno.land, you can apply for a grant. The Gno.land Ecosystem Fund and Grants program provides financial contributions for individuals and teams to innovate on the platform.
+
+
+
+[More information here](https://github.com/gnolang/ecosystem-fund-grants)
+
+
+`
+
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/page_start.gno b/examples/gno.land/r/gnoland/pages/page_start.gno
new file mode 100644
index 00000000000..a36ec6e52b1
--- /dev/null
+++ b/examples/gno.land/r/gnoland/pages/page_start.gno
@@ -0,0 +1,21 @@
+package gnopages
+
+func init() {
+ path := "start"
+ title := "Getting Started with Gno"
+ // XXX: description := ""
+
+ // TODO: codegen to use README files here
+
+ /* TODO: port previous message: This is a demo of Gno smart contract programming. This document was
+ constructed by Gno onto a smart contract hosted on the data Realm
+ name ["gno.land/r/demo/boards"](https://gno.land/r/demo/boards/)
+ ([github](https://github.com/gnolang/gno/tree/master/examples/gno.land/r/demo/boards)).
+ */
+ body := `## Getting Started with Gno
+
+- [Install Gno Key](/r/demo/boards:testboard/5)
+- TODO: add more links
+`
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/page_testnets.gno b/examples/gno.land/r/gnoland/pages/page_testnets.gno
new file mode 100644
index 00000000000..b6c09ab71ee
--- /dev/null
+++ b/examples/gno.land/r/gnoland/pages/page_testnets.gno
@@ -0,0 +1,19 @@
+package gnopages
+
+func init() {
+ path := "testnets"
+ title := "Gno.land Testnets"
+ // XXX: description := """
+ body := `## Other testnets
+
+- **[staging.gno.land](https://staging.gno.land) (wiped every commit to master)**
+- _[test3.gno.land](https://test3.gno.land) (latest)_
+- _[test2.gno.land](https://test2.gno.land) (archive)_
+- _[test1.gno.land](https://test1.gno.land) (archive)_
+
+## Local devnet
+
+See CONTRIBUTING.md on GitHub.
+`
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/page_tokenomics.gno b/examples/gno.land/r/gnoland/pages/page_tokenomics.gno
new file mode 100644
index 00000000000..de899ae0a70
--- /dev/null
+++ b/examples/gno.land/r/gnoland/pages/page_tokenomics.gno
@@ -0,0 +1,11 @@
+package gnopages
+
+func init() {
+ var (
+ path = "tokenomics"
+ title = "Gno.land Tokenomics"
+ // XXX: description = """
+ body = `Lorem Ipsum`
+ )
+ _ = b.NewPost("", path, title, body, nil)
+}
diff --git a/examples/gno.land/r/gnoland/pages/pages.gno b/examples/gno.land/r/gnoland/pages/pages.gno
index dbc3d855880..6e1f117d1d5 100644
--- a/examples/gno.land/r/gnoland/pages/pages.gno
+++ b/examples/gno.land/r/gnoland/pages/pages.gno
@@ -4,16 +4,12 @@ import (
"gno.land/p/demo/blog"
)
-var b = &blog.Blog{
- Title: "Gnoland's Pages",
- Prefix: "/r/gnoland/pages:",
-}
+// TODO: switch from p/blog to p/pages
-func init() {
- _ = b.NewPost("", "gor", "Game of Realms", "Lorem Ipsum", nil)
- _ = b.NewPost("", "events", "Events", "Lorem Ipsum", nil)
- _ = b.NewPost("", "tokenomics", "Tokenomics", "Lorem Ipsum", nil)
- _ = b.NewPost("", "start", "Getting Started", "Lorem Ipsum", nil)
+var b = &blog.Blog{
+ Title: "Gnoland's Pages",
+ Prefix: "/r/gnoland/pages:",
+ NoBreadcrumb: true,
}
func Render(path string) string {
diff --git a/examples/gno.land/r/gnoland/pages/pages_test.gno b/examples/gno.land/r/gnoland/pages/pages_test.gno
index 1a43153e2c8..5a6fe84ad38 100644
--- a/examples/gno.land/r/gnoland/pages/pages_test.gno
+++ b/examples/gno.land/r/gnoland/pages/pages_test.gno
@@ -6,48 +6,42 @@ import (
"testing"
)
-func TestPackage(t *testing.T) {
- std.TestSetOrigCaller(std.Address("g1u7y667z64x2h7vc6fmpcprgey4ck233jaww9zq"))
-
- author := std.GetOrigCaller()
-
- // by default, lorem ipsum posts
- {
- got := Render("")
- expected := `
-# Gnoland's Pages
-
-