Skip to content

Commit

Permalink
Version 2023-12-15
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrorgirardi committed Dec 15, 2023
2 parents 30f5165 + b868554 commit 533e458
Show file tree
Hide file tree
Showing 11 changed files with 199 additions and 108 deletions.
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Major changes and resolved issues

## 2023-12-15
- Updated ring-defaults
- Updated google-cloud-logging-logback
- Updated test.check
- Updated shadow-cljs
- Updated logging libraries:
- logback-classic
- slf4j-api
- jcl-over-slf4j
- log4j-over-slf4j
- jul-to-slf4j
- log4j-to-slf4j
- Remove rewrite-clj

## 2023-10-18
- [App - Fix Spinner #273](https://github.com/Convex-Dev/convex-web/issues/273)
- Change sitemap layout
Expand Down
28 changes: 13 additions & 15 deletions deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -27,41 +27,40 @@

org.clojure/tools.logging {:mvn/version "1.2.4"}

ch.qos.logback/logback-classic {:mvn/version "1.2.6"}
ch.qos.logback/logback-classic {:mvn/version "1.4.11"}

;; Logback implements the SLF4J API
org.slf4j/slf4j-api {:mvn/version "1.7.32"}
org.slf4j/slf4j-api {:mvn/version "2.0.9"}

;; Redirect Apache Commons Logging to Logback via the SLF4J API
org.slf4j/jcl-over-slf4j {:mvn/version "1.7.32"}
org.slf4j/jcl-over-slf4j {:mvn/version "2.0.9"}

;; Redirect Log4j 1.x to Logback via the SLF4J API
org.slf4j/log4j-over-slf4j {:mvn/version "1.7.32"}
org.slf4j/log4j-over-slf4j {:mvn/version "2.0.9"}

;; Redirect java.util.logging to Logback via the SLF4J API.
org.slf4j/jul-to-slf4j {:mvn/version "1.7.32"}
org.slf4j/jul-to-slf4j {:mvn/version "2.0.9"}

;; Redirect Log4j 2.x to Logback via the SLF4J API
org.apache.logging.log4j/log4j-to-slf4j {:mvn/version "2.14.1"}
org.apache.logging.log4j/log4j-to-slf4j {:mvn/version "2.21.1"}

;; Google Cloud Logging appender
com.google.cloud/google-cloud-logging-logback {:mvn/version "0.130.19-alpha"}
com.google.cloud/google-cloud-logging-logback {:mvn/version "0.130.25-alpha"}

com.brunobonacci/mulog {:mvn/version "0.8.0"}

;; -- End-of-Logging

aero/aero {:mvn/version "1.1.6"}
ring/ring-core {:mvn/version "1.10.0"}
ring/ring-defaults {:mvn/version "0.3.4"}
ring/ring-defaults {:mvn/version "0.4.0"}
ring/ring-mock {:mvn/version "0.4.0"}
ring-cors/ring-cors {:mvn/version "0.1.13"}
http-kit/http-kit {:mvn/version "2.7.0"}
compojure/compojure {:mvn/version "1.7.0"}
hiccup/hiccup {:mvn/version "1.0.5"}
datalevin/datalevin {:mvn/version "0.7.7"}
cljfmt/cljfmt {:mvn/version "0.9.2"}
rewrite-clj/rewrite-clj {:mvn/version "1.0.682-alpha"}
expound/expound {:mvn/version "0.9.0"}
borkdude/sci {:mvn/version "0.2.5"}}

Expand Down Expand Up @@ -89,24 +88,23 @@
{:extra-deps
{com.cognitect/transit-cljs {:mvn/version "0.8.280"}
lambdaisland/glogi {:mvn/version "1.3.169"}
reagent/reagent {:mvn/version "1.2.0"}
re-frame/re-frame {:mvn/version "1.3.0"}
re-frame/re-frame {:mvn/version "1.4.2"}
metosin/reitit-frontend {:mvn/version "0.6.0"}
cljs-ajax/cljs-ajax {:mvn/version "0.8.4"}}}

;; -- Site dev
:site-dev
{:extra-deps
{thheller/shadow-cljs {:mvn/version "2.25.7"}
org.slf4j/slf4j-nop {:mvn/version "2.0.6"}
{thheller/shadow-cljs {:mvn/version "2.26.2"}
org.slf4j/slf4j-nop {:mvn/version "2.0.9"}
binaryage/devtools {:mvn/version "1.0.7"}
re-frisk/re-frisk {:mvn/version "1.6.0"}}}


;; -- Test
:test
{:extra-paths ["src/test/clojure"]
:extra-deps {org.clojure/test.check {:mvn/version "1.1.0"}}}
:extra-deps {org.clojure/test.check {:mvn/version "1.1.1"}}}


;; -- Socket REPL
Expand Down Expand Up @@ -155,6 +153,6 @@
:outdated
{:replace-deps
{com.github.liquidz/antq {:mvn/version "2.7.1133"}
org.slf4j/slf4j-nop {:mvn/version "1.7.32"}}
org.slf4j/slf4j-nop {:mvn/version "2.0.9"}}

:main-opts ["-m" "antq.core"]}}}
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
},
"devDependencies": {
"@tailwindcss/typography": "^0.5.9",
"shadow-cljs": "^2.25.7",
"shadow-cljs": "^2.26.2",
"tailwindcss": "^3.3.3"
},
"overrides": {
Expand Down
2 changes: 2 additions & 0 deletions src/main/clojure/convex_web/site/app.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
[convex-web.site.format :as format]
[convex-web.site.markdown :as markdown]
[convex-web.site.team :as team]
[convex-web.site.videos :as videos]
[convex-web.site.brand :as brand]
[convex-web.site.form :as form]

Expand Down Expand Up @@ -73,6 +74,7 @@
not-found-page

team/team-page
videos/videos-page

brand/brand-page
form/sign-up-page
Expand Down
10 changes: 10 additions & 0 deletions src/main/clojure/convex_web/site/router.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,16 @@
:start (fn [_match]
(stack/push :page.id/brand {:reset? true}))}]}]


;; Videos
;; ==============
["videos"
{:name :route-name/videos
:controllers
[{:identity identity
:start (fn [_match]
(stack/push :page.id/videos {:reset? true}))}]}]


;; Developer
;; ==============
Expand Down
28 changes: 28 additions & 0 deletions src/main/clojure/convex_web/site/videos.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
(ns convex-web.site.videos)

(defn VideosPage [_ _ _]
(let [iframe {:width "405.33"
:height "200.58"
:allow "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
:allowfullscreen true}]

[:div.grid.grid-cols-3.gap-12

;; -- Interactive REPL Explained
[:iframe
(merge iframe
{:title "Interactive REPL Explained"
:src "https://www.youtube.com/embed/d_4pR_GWJsM?si=yIR-u_3oh0-liEuB" })]

;; -- Importance of Runtime
[:iframe
(merge iframe
{:title "Importance of Runtime"
:src "https://www.youtube.com/embed/mNxuVgjotEM?si=WZ-UB-Zv-zYr7gQ-" })]]))

(def videos-page
#:page
{:id :page.id/videos
:title "Video"
:template :marketing
:component #'VideosPage})
4 changes: 2 additions & 2 deletions src/main/clojure/convex_web/site/welcome.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -262,10 +262,10 @@
[:div.flex.flex-col.gap-3

[:h1.text-4xl.lg:text-5xl.font-extrabold.text-white.text-center
"Lattice Technology for the Next Generation Internet"]
"Decentralised Engine for Open Economic Systems"]

[:p.font-source-sans-pro.text-white.text-3xl.text-center
"All the advantages of blockchain without the compromises: enabling realtime, decentralised, programmable economic systems at Internet scale."]
"Empowering visionaries, builders, and dreamers with a platform that inspires new and innovative economic models to emerge."]

[:div.flex.justify-center.mt-12
[:a
Expand Down
5 changes: 3 additions & 2 deletions src/main/resources/markdown/concepts.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
Convex is a technology platform for the Internet of Value.
## Convex Engine

This section of `convex.world` is dedicated to exploring the ideas and concepts of the Internet of Value, and how they are implemented in the Convex system.
Convex is a new kind of foundational technology; it's a decentralised engine for building an internet of value designed to enable open economic systems.

This section of `convex.world` is dedicated to exploring the ideas and concepts of open economic systems and how they are implemented in the Convex Engine.
44 changes: 25 additions & 19 deletions src/main/resources/markdown/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
An Account is a record of identification and ownership within Convex. Accounts may be either:

* **User Accounts**: Accounts that are controlled by external users, where access is controlled by digital signatures on transactions.
* **Actor Accounts**: Accounts that are managed by an autonomous Actor, where behavior is 100% deterministic according the associated CVM code.
* **Actor Accounts**: Accounts that are managed by an autonomous Actor, where behavior is 100% deterministic according to the associated CVM code.

## Account Key

Expand All @@ -15,7 +15,7 @@ It is generally shown as a hexadecimal string, looking something like:
0x8506cc53f9b7dD152C9BB5386d50C360ff85EFD043049aea55B44362D92C0E1C
```

Technically, the Account Key of a User Account is an `Ed25519` Public Key. You must be in possession of the corresponding private key in order to digitally sign transactions for that Account. Actor Accounts have Addresses that are generated via SHA3-256 hash functions (and therefore do not have a corresponding private key, and no transactions can be submitted for them).
Technically, the Account Key of a User Account is an `Ed25519` Public Key. You must be in possession of the corresponding private key in order to digitally sign transactions for that Account. Actor Accounts have Addresses that are generated via SHA3-256 hash functions and therefore do not have a corresponding private key, and no transactions can be submitted for them.

## Actor

Expand All @@ -35,7 +35,6 @@ An Address is conventionally displayed as a number with with a `#` prefix e.g.:

Addresses are issued sequentially for new Accounts by the CVM.


## Belief

A Belief is a specialised Value containing a Peer's combined view of Consensus.
Expand Down Expand Up @@ -64,7 +63,7 @@ A Block must be digitally signed by the proposing Peer to be valid for inclusion

A system that maintains an appendable sequence of Blocks where each block contains a cryptographic hash of the previous block (and hence its integrity can be validated recursively all the way back to the original block).

Technically, Convex is not a blockchain because Blocks are not required to contain a hash of any previous Block. This gives Convex a technical advantage because Blocks can therefore be handled in parallel and re-ordered by the higher level Consensus Algorithm after creation.
Technically, Convex is a Lattice and not a Blockchain because Blocks are not required to contain a hash of any previous Block. This gives Convex a technical advantage because Blocks can therefore be handled in parallel and re-ordered by the higher level Consensus Algorithm after creation.

## Consensus Algorithm

Expand Down Expand Up @@ -92,6 +91,10 @@ Convex Lisp prioritises features that are well suited to the development of dece
* Use of immutable, persistent data structures
* Actor-based model enabling trusted autonomous execution of code for Smart Contracts

## CPoS

Acronym for Convergent Proof of Stake. Converges to a secure global transaction order with realtime settlement, is decentralised and permissionless, energy efficient (PoS variant), secure (offers front running resistance), Byzantine Fault Tolerant, offers zero block delay (leaderless), and the implementation and IP is unique to Convex.

## CRDT

Acronym for Conflict-free Replicated Data Type, a data structure that can be replicated across many computers in a network and is guaranteed (mathematically) to reach eventual consistency.
Expand All @@ -116,8 +119,8 @@ A dApp is a decentralised application.

We can distinguish between two forms of Dapp:

- **Pure dApp** - the Dapp consists only of client code and on-chain implementation (i.e. the Dapp depends on the Convex network and nothing else). Such Dapps are simple to build and maintain, and minimise the risk of relying on centralised systems
- **Hybrid dApp** - the Dapp uses client code, on-chain-implementation and one or more off-chain servers. This is more complex to build and maintain, but is necessary if additional servers are required (e.g. to store private information, or to integrate with external systems)
- **Pure dApp** - the Dapp consists only of client code and on-lattice implementation (i.e. the Dapp depends on the Convex network and nothing else). Such Dapps are simple to build and maintain, and minimise the risk of relying on centralised systems
- **Hybrid dApp** - the Dapp uses client code, on-lattice-implementation and one or more off-lattice servers. This is more complex to build and maintain, but is necessary if additional servers are required (e.g. to store private information, or to integrate with external systems)

## Digital Signature

Expand All @@ -135,7 +138,7 @@ Encodings are designed to be:
- Efficient for serialisation and deserialisation
- Canonical (i.e. any Data Object has one and only one valid Encoding)

The maximum Encoding size is 8191 byes. Larger Data Objects are broken down into multiple Cells which each have their individual Encoding - however this is handled automatically by Convex and not usually a relevant concern for users or developers.
The maximum Encoding size is 8191 bytes. Larger Data Objects are broken down into multiple Cells which each have their individual Encoding - however this is handled automatically by Convex and not usually a relevant concern for users or developers.

## Environment

Expand All @@ -155,7 +158,7 @@ Etch implements Converge Immutable Storage for Data Objects.

A Fork in a consensus system is, in general, where two or more different groups diverge in agreement on the value of shared Global State.

This creates significant problems with a system of value exchange because assets may have different ownership in different forks - which in some cases could cause major economic loss (e.g. the infamous "double spend problem")
This creates significant problems with a system of value exchange because assets may have different ownership in different forks - which in some cases could cause major economic loss (e.g. the infamous "double spend problem").

Convex is designed to prevent forks. In the unlikely event of a fork created by malicious actors or software / network failures, the Convex Network will follow the largest majority among known, trusted Peers (this is a governance decision outside the scope of the Protocol).

Expand All @@ -171,25 +174,29 @@ Functions can support multiple arities on the CVM (e.g. `+`, although many funct

An Icon generated in a pre-defined way that can be used to visually confirm if a value is identical to another value. Identicons are used in Convex to provide additional security for similar Addresses that might be hard to distinguish by the hexadecimal strings alone.

## Lattice

A Lattice is a mathematical structure which guarantees the convergent properties of CPoS – any set of Peer Beliefs will converge to consensus after successive belief merges.

## Memory

Memory in Convex is a second native cryptocurrency (in addition to Convex Coins) that can be used to purchase on-chain storage capacity.
Memory in Convex is a second native cryptocurrency (in addition to Convex Coins) that can be used to purchase on-lattice storage capacity.

Users need to buy Memory if they want to execute transactions that increase the size of the State. USers get a refund if they execute Transactions that reduce the size of the State - creating a good incentive to use on-chain resources efficiently.
Users need to buy Memory if they want to execute transactions that increase the size of the State. Users get a refund if they execute Transactions that reduce the size of the State - creating a good incentive to use on-lattice resources efficiently.

## Memory Accounting

Memory Accounting is the process by which changes in Memory usage are attributed and charged to Users.

This is a necessary feature of Convex to create the right incentives to utilise on-chain memory efficiently. Without a system of Memory Accounting, there would be a risk of careless usage of Memory leading to ever-increasing size of the Global State (sometimes termed the "state growth problem" in Blockchains).
This is a necessary feature of Convex to create the right incentives to utilise on-lattice memory efficiently. Without a system of Memory Accounting, there would be a risk of careless usage of Memory leading to ever-increasing size of the Global State (sometimes termed the "state growth problem" in Blockchains).

## On-chain
## On-lattice

Data or code is considered to be "on-chain" if is contained within or affects the current State of the CVM.
Data or code is considered to be "on-lattice" if is contained within or affects the current State of the CVM.

On-chain data is the *only* information that is visible to the CVM. It can be accessed and used by Actors, e.g. as part of the management of smart contracts and digital assets.
On-lattice data is the *only* information that is visible to the CVM. It can be accessed and used by Actors, e.g. as part of the management of smart contracts and digital assets.

As a general principle, on-chain data should be kept to the *absolute minimum necessary*. This is because:
As a general principle, on-lattice data should be kept to the *absolute minimum necessary*. This is because:

- It has a real cost (in terms of both coins and memory)
- It is effectively public information so should exclude any confidential or private information
Expand Down Expand Up @@ -226,13 +233,13 @@ Scheduled code may be used to implement actors that take periodic actions, smart

## Smart Contract

A Smart Contract is a self-executing economic contract with the terms of the agreement written into lines of code that are executed deterministically on the CVM. Buyer and sellers can predict exactly how the Smart Contract will behave, and can therefore trust it to enforce contract terms and conditions effectively.
A Smart Contract is a self-executing economic contract with the terms of the agreement written into lines of code that are executed deterministically on the CVM. Buyers and sellers can predict exactly how the Smart Contract will behave, and can therefore trust it to enforce contract terms and conditions effectively.

Typically a Smart Contract would be implemented using an Actor, but it is possible for a single Actor to manage many smart contracts, and likewise for a single Smart Contract to be executed across multiple Actors. It may be helpful to think of Smart Contracts as secure economic constructs, and Actors as a lower level implementation mechanism.

## Stake

A Stake is an asset with economic value put at risk by some entity in order to prove commitment to its participation in some economic transaction and / or good future behavior.
A Stake is an asset with economic value put at risk by some entity in order to prove commitment to its participation in some economic transaction and / or good future behaviour.

Convex uses a mechanism called Delegated Proof of Stake to admit Peers for participation in the Consensus algorithm. Other forms of stakes may be used in Smart Contracts.

Expand All @@ -249,7 +256,6 @@ While good Peers are expected to be content neutral, they may legitimately wish

The protocol does not allow Peers to reverse a confirmed consensus, or prevent (censor) a Block from being included in consensus. Their stake may be at risk if they attempt this.


## State

A State is a special (typically large) Value that refers to the complete information managed by execution on the CVM. It is in effect the "Universe" that can be manipulated by Transactions and CVM code.
Expand Down Expand Up @@ -287,7 +293,7 @@ Value types include:
* Executable CVM code ("Ops")
* Some special values used by the CVM, e.g. Blocks

Values may be processed by code within the CVM, and are the fundamental building blocks for on-chain systems such as smart contracts.
Values may be processed by code within the CVM, and are the fundamental building blocks for on-lattice systems such as smart contracts.

## Wallet

Expand Down
Loading

0 comments on commit 533e458

Please sign in to comment.