network • In a traditional smart contract system (such as Ethereum), every validator node must execute and validate every transaction ◦ Results in a severe computation and transaction processing bottleneck • SmartWeave instead pushes contract execution to users of the smart contract ◦ Frees network validators from contract state management and validation ◦ Altogether eliminates the need for ‘gas’ to pay for contract execution • Read more at Introducing SmartWeave: Building Smart Contracts with Arweave and With Arweave's 'Lazy' Approach to Smart Contracts, Its Version of Web3 Does More • Find the GitHub repository at https://github.com/ArweaveTeam/SmartWeave SmartWeave: Arweave’s Smart Contract Protocol
contain footguns) and decidable (won’t let you get into an infinite loop) • Syntactically and semantically inspired by Lisp (familiar to fans of Clojure!) ◦ For machines: it is trivial to generate, parse, and analyze Clarity code, from anywhere ◦ For humans: don’t fear the parentheses, they do fade away after a little use • Originally developed by Hiro (formerly known as Blockstack) and Algorand • Read more at Introducing Clarity, a Language for Predictable Smart Contracts and Bringing ‘Clarity’ to 8 Dangerous Smart Contract Vulnerabilities • Find the GitHub repositories at https://github.com/clarity-lang Clarity: A Safe, Decidable Smart Contract Language
smart contracts into SmartWeave contracts that run on the Arweave blockchain ◦ The sworn program parses and compiles .clar files ◦ The output is an equivalent SmartWeave program in the form of JavaScript code ◦ Also includes experimental WebAssembly output, but JavaScript is recommended since the generated JS contracts are perfectly human readable and thus feasible to audit • The generated SmartWeave code requires Clarity.js, which implements the necessary runtime support for Clarity's standard library • Read more at Weaving Clarity: Safe Smart Contracts for SmartWeave • Find the compiler’s GitHub repository at https://github.com/weavery/sworn and the Clarity.js runtime’s at https://github.com/weavery/clarity.js
complexity ◦ It is not possible to write an infinite loop in a Clarity program ◦ Each and every Clarity program will halt, guaranteed • You can know, with certainty, from the code itself what the program will do ◦ It is possible to analyze Clarity code for runtime cost and data usage • Enables the complete static analysis of the entire call graph ◦ For auditability, the set of reachable code can be efficiently determined • The type checker can eliminate whole classes of bugs ◦ Unintended casts, reentrancy bugs, reads of uninitialized values, etc.
system does not have a universal supertype ◦ The language does not support sequences that have dynamic length ◦ The length of a sequence (string, buffer, or list) is a part of its static type • Safe arithmetic only ◦ No silent overflow, underflow, or truncation permitted • Null safety isn’t optional ◦ No null type nor value! Replaced by an optional type, as in other modern languages ◦ “I call it my billion-dollar mistake.” — Tony Hoare • Error checking is serious business ◦ No unchecked return values nor silently swallowed errors • Omits a long list of Solidity footguns (anti-features) ◦ No reentrancy, no untyped inputs, no default functions, etc. Clarity: A Safe Language
safe arithmetic that traps on numeric overflow and underflow, arithmetic operations need runtime support • Thus, in the general case, an operation such as (* a b) must be compiled to clarity.mul(a, b) instead of the trivial but ultimately incorrect a * b. • If the compiler can prove overflow or underflow will not occur in a particular context, it can elide the function call and output ordinary JavaScript arithmetic FAQ: Why does basic math require function calls?
err Err<T> Err Int, uint number or bigint number or BigInt (list N T) Array<T> Array (optional T) T or null T or null principal String String (response T E) T or Err<E> T or Err (string-ascii N) String String (string-utf8 N) String String (tuple …) Map<String, any> Map
on user experience ◦ More static analysis for Clarity input, rejecting more invalid programs ◦ Significantly improved error messages from the compiler • Many exciting things on the wishlist for an eventual Sworn 2.0 ◦ Prototyping is already going on for ingesting (a subset of) Solidity contracts via the Solidity project’s Yul intermediate language • Much work remains on Clarity.js and SmartWeave integration ◦ Arweave-specific Clarity functions for easily building profit-sharing tokens and communities! ◦ Contributors most welcome: TypeScript developers needed • Clarity contracts can soon already be used on three blockchains: Arweave, Ethereum, and Stacks ◦ Some expressions of interest from other blockchains as well Sworn 1.1, 2.0 — And Beyond