From 7e34832e05cfc66c39bc08a09d6967226035c97f Mon Sep 17 00:00:00 2001 From: Clemens Ley Date: Fri, 24 May 2024 23:00:56 -0300 Subject: [PATCH 1/9] Docs: rename Api to Lib --- packages/docs/{API => Lib}/broadcast.md | 0 packages/docs/{API => Lib}/constructor.md | 0 packages/docs/{API => Lib}/decode.md | 0 packages/docs/{API => Lib}/deploy.md | 0 packages/docs/{API => Lib}/encode.md | 0 packages/docs/{API => Lib}/encodeCall.md | 0 packages/docs/{API => Lib}/encodeNew.md | 0 packages/docs/{API => Lib}/faucet.md | 0 packages/docs/{API => Lib}/fund.md | 0 packages/docs/{API => Lib}/getAddress.md | 0 packages/docs/{API => Lib}/getBalance.md | 0 packages/docs/{API => Lib}/getChain.md | 0 packages/docs/{API => Lib}/getMnemonic.md | 0 packages/docs/{API => Lib}/getNetwork.md | 0 packages/docs/{API => Lib}/getPassphrase.md | 0 packages/docs/{API => Lib}/getPrivateKey.md | 0 packages/docs/{API => Lib}/getPublicKey.md | 0 packages/docs/{API => Lib}/getUtxos.md | 0 packages/docs/{API => Lib}/index.yml | 1 + packages/docs/{API/api.md => Lib/lib.md} | 2 +- packages/docs/{API => Lib}/load.md | 0 packages/docs/{API => Lib}/new.md | 0 packages/docs/{API => Lib}/query.md | 0 packages/docs/{API => Lib}/rpcCall.md | 0 packages/docs/{API => Lib}/send.md | 0 packages/docs/{API => Lib}/sign.md | 0 packages/docs/{API => Lib}/sync.md | 0 27 files changed, 2 insertions(+), 1 deletion(-) rename packages/docs/{API => Lib}/broadcast.md (100%) rename packages/docs/{API => Lib}/constructor.md (100%) rename packages/docs/{API => Lib}/decode.md (100%) rename packages/docs/{API => Lib}/deploy.md (100%) rename packages/docs/{API => Lib}/encode.md (100%) rename packages/docs/{API => Lib}/encodeCall.md (100%) rename packages/docs/{API => Lib}/encodeNew.md (100%) rename packages/docs/{API => Lib}/faucet.md (100%) rename packages/docs/{API => Lib}/fund.md (100%) rename packages/docs/{API => Lib}/getAddress.md (100%) rename packages/docs/{API => Lib}/getBalance.md (100%) rename packages/docs/{API => Lib}/getChain.md (100%) rename packages/docs/{API => Lib}/getMnemonic.md (100%) rename packages/docs/{API => Lib}/getNetwork.md (100%) rename packages/docs/{API => Lib}/getPassphrase.md (100%) rename packages/docs/{API => Lib}/getPrivateKey.md (100%) rename packages/docs/{API => Lib}/getPublicKey.md (100%) rename packages/docs/{API => Lib}/getUtxos.md (100%) rename packages/docs/{API => Lib}/index.yml (60%) rename packages/docs/{API/api.md => Lib/lib.md} (99%) rename packages/docs/{API => Lib}/load.md (100%) rename packages/docs/{API => Lib}/new.md (100%) rename packages/docs/{API => Lib}/query.md (100%) rename packages/docs/{API => Lib}/rpcCall.md (100%) rename packages/docs/{API => Lib}/send.md (100%) rename packages/docs/{API => Lib}/sign.md (100%) rename packages/docs/{API => Lib}/sync.md (100%) diff --git a/packages/docs/API/broadcast.md b/packages/docs/Lib/broadcast.md similarity index 100% rename from packages/docs/API/broadcast.md rename to packages/docs/Lib/broadcast.md diff --git a/packages/docs/API/constructor.md b/packages/docs/Lib/constructor.md similarity index 100% rename from packages/docs/API/constructor.md rename to packages/docs/Lib/constructor.md diff --git a/packages/docs/API/decode.md b/packages/docs/Lib/decode.md similarity index 100% rename from packages/docs/API/decode.md rename to packages/docs/Lib/decode.md diff --git a/packages/docs/API/deploy.md b/packages/docs/Lib/deploy.md similarity index 100% rename from packages/docs/API/deploy.md rename to packages/docs/Lib/deploy.md diff --git a/packages/docs/API/encode.md b/packages/docs/Lib/encode.md similarity index 100% rename from packages/docs/API/encode.md rename to packages/docs/Lib/encode.md diff --git a/packages/docs/API/encodeCall.md b/packages/docs/Lib/encodeCall.md similarity index 100% rename from packages/docs/API/encodeCall.md rename to packages/docs/Lib/encodeCall.md diff --git a/packages/docs/API/encodeNew.md b/packages/docs/Lib/encodeNew.md similarity index 100% rename from packages/docs/API/encodeNew.md rename to packages/docs/Lib/encodeNew.md diff --git a/packages/docs/API/faucet.md b/packages/docs/Lib/faucet.md similarity index 100% rename from packages/docs/API/faucet.md rename to packages/docs/Lib/faucet.md diff --git a/packages/docs/API/fund.md b/packages/docs/Lib/fund.md similarity index 100% rename from packages/docs/API/fund.md rename to packages/docs/Lib/fund.md diff --git a/packages/docs/API/getAddress.md b/packages/docs/Lib/getAddress.md similarity index 100% rename from packages/docs/API/getAddress.md rename to packages/docs/Lib/getAddress.md diff --git a/packages/docs/API/getBalance.md b/packages/docs/Lib/getBalance.md similarity index 100% rename from packages/docs/API/getBalance.md rename to packages/docs/Lib/getBalance.md diff --git a/packages/docs/API/getChain.md b/packages/docs/Lib/getChain.md similarity index 100% rename from packages/docs/API/getChain.md rename to packages/docs/Lib/getChain.md diff --git a/packages/docs/API/getMnemonic.md b/packages/docs/Lib/getMnemonic.md similarity index 100% rename from packages/docs/API/getMnemonic.md rename to packages/docs/Lib/getMnemonic.md diff --git a/packages/docs/API/getNetwork.md b/packages/docs/Lib/getNetwork.md similarity index 100% rename from packages/docs/API/getNetwork.md rename to packages/docs/Lib/getNetwork.md diff --git a/packages/docs/API/getPassphrase.md b/packages/docs/Lib/getPassphrase.md similarity index 100% rename from packages/docs/API/getPassphrase.md rename to packages/docs/Lib/getPassphrase.md diff --git a/packages/docs/API/getPrivateKey.md b/packages/docs/Lib/getPrivateKey.md similarity index 100% rename from packages/docs/API/getPrivateKey.md rename to packages/docs/Lib/getPrivateKey.md diff --git a/packages/docs/API/getPublicKey.md b/packages/docs/Lib/getPublicKey.md similarity index 100% rename from packages/docs/API/getPublicKey.md rename to packages/docs/Lib/getPublicKey.md diff --git a/packages/docs/API/getUtxos.md b/packages/docs/Lib/getUtxos.md similarity index 100% rename from packages/docs/API/getUtxos.md rename to packages/docs/Lib/getUtxos.md diff --git a/packages/docs/API/index.yml b/packages/docs/Lib/index.yml similarity index 60% rename from packages/docs/API/index.yml rename to packages/docs/Lib/index.yml index 4c1bed927..4916ed505 100644 --- a/packages/docs/API/index.yml +++ b/packages/docs/Lib/index.yml @@ -1,2 +1,3 @@ order: -60 icon: tools +expanded: true diff --git a/packages/docs/API/api.md b/packages/docs/Lib/lib.md similarity index 99% rename from packages/docs/API/api.md rename to packages/docs/Lib/lib.md index 8414498ad..05976e7c8 100644 --- a/packages/docs/API/api.md +++ b/packages/docs/Lib/lib.md @@ -2,7 +2,7 @@ order: -40 --- -# API +# Lib This API describes the functionality of the `Computer` class, exported from [`@bitcoin-computer/lib`](https://www.npmjs.com/package/@bitcoin-computer/lib). diff --git a/packages/docs/API/load.md b/packages/docs/Lib/load.md similarity index 100% rename from packages/docs/API/load.md rename to packages/docs/Lib/load.md diff --git a/packages/docs/API/new.md b/packages/docs/Lib/new.md similarity index 100% rename from packages/docs/API/new.md rename to packages/docs/Lib/new.md diff --git a/packages/docs/API/query.md b/packages/docs/Lib/query.md similarity index 100% rename from packages/docs/API/query.md rename to packages/docs/Lib/query.md diff --git a/packages/docs/API/rpcCall.md b/packages/docs/Lib/rpcCall.md similarity index 100% rename from packages/docs/API/rpcCall.md rename to packages/docs/Lib/rpcCall.md diff --git a/packages/docs/API/send.md b/packages/docs/Lib/send.md similarity index 100% rename from packages/docs/API/send.md rename to packages/docs/Lib/send.md diff --git a/packages/docs/API/sign.md b/packages/docs/Lib/sign.md similarity index 100% rename from packages/docs/API/sign.md rename to packages/docs/Lib/sign.md diff --git a/packages/docs/API/sync.md b/packages/docs/Lib/sync.md similarity index 100% rename from packages/docs/API/sync.md rename to packages/docs/Lib/sync.md From fc89ea86f1832002b37ccad6e26fbdf497e9c679 Mon Sep 17 00:00:00 2001 From: Clemens Ley Date: Fri, 24 May 2024 23:01:25 -0300 Subject: [PATCH 2/9] Docs: add new image files --- packages/docs/static/docs.sketch | Bin 38362 -> 30165 bytes packages/docs/static/int-example@1x.png | Bin 0 -> 3897 bytes packages/docs/static/legend@1x.png | Bin 8846 -> 4031 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/docs/static/int-example@1x.png diff --git a/packages/docs/static/docs.sketch b/packages/docs/static/docs.sketch index a019d973b4ee7ca37b349ca704d245ae38ea41ce..b275ab0b0139e1d21f2d934cb4265e1cffc67126 100644 GIT binary patch delta 28196 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 literal 38362 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 OXj4P;=x?WjJoPsVFW1x�~iJ|;o#t=jG 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 Aq5uE@ literal 0 HcmV?d00001 diff --git a/packages/docs/static/legend@1x.png b/packages/docs/static/legend@1x.png index 820c77a60abc558696167b8c4a757a9dabd55074..ac9791af9daada9f83d4634a6275bc9f599a87bd 100644 GIT binary patch delta 4007 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 From 105c7d052473b207798067faadc3d3b3c4a63e5d Mon Sep 17 00:00:00 2001 From: Clemens Ley Date: Fri, 24 May 2024 23:01:59 -0300 Subject: [PATCH 3/9] Docs: expand examples by default --- packages/docs/Examples/index.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/docs/Examples/index.yml b/packages/docs/Examples/index.yml index 440d4c70a..439a9ae46 100644 --- a/packages/docs/Examples/index.yml +++ b/packages/docs/Examples/index.yml @@ -1,2 +1,3 @@ order: -50 icon: apps +expanded: true From 08d6e09248130da3a56c7d3499eebd26908b1c87 Mon Sep 17 00:00:00 2001 From: Clemens Ley Date: Fri, 24 May 2024 23:02:23 -0300 Subject: [PATCH 4/9] Docs: add comparison (currently hidden) --- packages/docs/comparison.md | 117 ++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 packages/docs/comparison.md diff --git a/packages/docs/comparison.md b/packages/docs/comparison.md new file mode 100644 index 000000000..842a63860 --- /dev/null +++ b/packages/docs/comparison.md @@ -0,0 +1,117 @@ +--- +order: -37 +icon: diff +visibility: hidden +--- + +# Comparison + +## Layer 2 + +In layer-2 solutions, transactions are performed +out of the blockchain (layer-1) and can ultimately settle +back efficiently to the blockchain. + +### Side Chains +* [Stacks](https://docs.stacks.co/) +* [Rootstock](https://dev.rootstock.io/) +* [Internet Computer](https://internetcomputer.org/docs/current/home) + +### Payment Channel Networks +* [Ark](https://ark-protocol.org/) +* [RGB](https://docs.rgb.info/) + +### Rollups + +*Rollups* execute batches of transactions outside the main blockchain, +convert them into one single piece of data and submit it to the +main blockchain. [1] + +#### Optimistic Rollups + +*Optimistic rollups* assume transactions +are valid. For a period of time, each user has the opportunity +to challenge the transaction and, in such a case, must present a +fraud proof. [1] + +Optimistic rollups have two main +entities participating: aggregators and verifiers. Once an +aggregator publishes a transaction, there is a period of +time when each node acting as a verifier can monitor data +published by the aggregator. If the verifier disagrees with +the published data, she can challenge the transaction. To +discourage aggregators and verifiers from acting maliciously, +both the aggregator and verifier need to stake a bond. If the +verifier can provide a fraud proof, the aggregator is fined. +Otherwise, the verifier gets fined. [...] Only one honest verifier is needed to guarantee that the +aggregator did not act maliciously.[1] + +#### Zero-knowledge Rollups + +*Zero-knowledge rollups* do not assume fair play, and together with transaction +data, the aggregator provides a validity proof. [1] + +While optimistic rollups use fraud proofs +for security, Zero-Knowledge (ZK) rollups use validity +proofs. Instead of allowing the aggregator +to publish a transaction and then question it, in ZK +rollups, the aggregator must prove the post-state root is +the correct result of the batch execution using a validity +proof. + +#### Optimistic vs ZK Rollups + + Building +a validity proof requires heavy computations; hence, ZK +rollups’ offchain fees are higher than optimistic rollups. Additionally, a ZK rollup layer-1 transaction has a much +higher fixed fee since it requires a validity proof verification +hence gas fees are higher. [1] + +Though, since optimistic rollups +have a period where verifiers have an opportunity to publish a +fraud proof, the users need to wait (usually a week) until their +deposits can be withdrawn, while in ZK-rollups, deposits can +be withdrawn immediately. [1] + +* [BOB](https://docs.gobob.xyz/) +* [Citrea](https://docs.citrea.xyz/) +* [Alpen](https://www.alpenlabs.io/) + +## Layer 1 + +### Miner Validated +* [Bitcoin Script]() +* [BitVM](https://bitvm.org/) (is this L2?) + +### Client Validated +* [EPOBC](https://github.com/chromaway/ngcccbase/wiki/EPOBC_simple) +* [CounterParty](https://docs.counterparty.io/docs/basics/what-is-counterparty/) +* [Ordinals](https://docs.ordinals.com/) +* [BRC20](https://domo-2.gitbook.io/brc-20-experiment) +* [Runes](https://docs.ordinals.com/runes.html) +* [Bitcoin Computer](https://docs.bitcoincomputer.io/) + + +## References + +* https://www.bitcoinlayers.org/ +* https://www.bitcoinrollups.io/ +* https://www.hiro.so/blog/building-on-bitcoin-project-comparison +* https://www.hiro.so/ + +## Articles +[1] [SoK: Applications of Sketches and Rollups in Blockchain Networks](https://drive.google.com/file/d/1dJ2OsAc4QvIWzxR1JFFmMfMVYIrnXOWW/view), Arad Kotzer, Daniel Gandelman and Ori Rottenstreich; Technion, Florida State University +* [Blockchain Scaling Using Rollups: A Comprehensive Survey](https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9862815), LOUIS TREMBLAY THIBAULT, TOM SARRY, AND ABDELHAKIM SENHAJI HAFID; Montreal +* [SoK: unraveling Bitcoin smart contracts](https://eprint.iacr.org/2018/192.pdf), Nicola Atzei, Massimo Bartoletti, Tiziana Cimoli, Stefano Lande; Cagliari, Trento +Roberto Zunino +* [Beyond Bitcoin: A Review Study on the Diverse Future of Cryptocurrency](https://www.researchgate.net/publication/373825700_Beyond_Bitcoin_A_Review_Study_on_the_Diverse_Future_of_Cryptocurrency), Mohammed Faez Hasan, University of Kerbala +* [BitML: A Calculus for Bitcoin Smart Contracts](https://eprint.iacr.org/2018/122.pdf), Massimo Bartoletti, Roberto Zunino; Cagliari, Trento +* [An Overview of Smart Contract and Use cases in Blockchain Technology](https://www.researchgate.net/profile/Bhabendu-Mohanta/publication/328581609_An_Overview_of_Smart_Contract_and_Use_Cases_in_Blockchain_Technology/links/5bf398a592851c6b27cbfeac/An-Overview-of-Smart-Contract-and-Use-Cases-in-Blockchain-Technology.pdf), Bhabendu Kumar Mohanta, Soumyashree S Panda, Debasish Jena; IIIT Bhubaneswar +* [Layer 2 Blockchain Scaling: a Survey](https://arxiv.org/pdf/2107.10881), Cosimo Sguanci, Roberto Spatafora, Andrea Mario Vergani; Polytechnico Milano +* [A Rollup Comparison Framework](https://arxiv.org/pdf/2404.16150), Jan Gorzny, Martin Derka; Zircuit +* [SoK: Decentralized Finance (DeFi)](https://dl.acm.org/doi/pdf/10.1145/3558535.3559780) +* [SoK: Communication Across Distributed Ledgers](https://eprint.iacr.org/2019/1128.pdf) +* [Colored Coins whitepaper](https://www.etoro.com/wp-content/uploads/2022/03/Colored-Coins-white-paper-Digital-Assets.pdf), Yoni Assia, Vitalik Buterin, liorhakiLior, Meni Rosenfeld, Rotem Lev + + + From ae2b9cbac10cb9327baa5e6782f405392f9437ed Mon Sep 17 00:00:00 2001 From: Clemens Ley Date: Fri, 24 May 2024 23:02:51 -0300 Subject: [PATCH 5/9] Docs: add transaction format (currently empty) --- packages/docs/format.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 packages/docs/format.md diff --git a/packages/docs/format.md b/packages/docs/format.md new file mode 100644 index 000000000..f599ab9dc --- /dev/null +++ b/packages/docs/format.md @@ -0,0 +1,8 @@ +--- +order: -36 +icon: note +--- + +# Transaction Format + +Coming soon. \ No newline at end of file From b40f9447346d17eb097b0817fbe1445ffb7ab6de Mon Sep 17 00:00:00 2001 From: Clemens Ley Date: Fri, 24 May 2024 23:03:14 -0300 Subject: [PATCH 6/9] Docs: complete rewrite of "How it works" --- packages/docs/how-it-works.md | 131 +++++++++++----------------------- 1 file changed, 41 insertions(+), 90 deletions(-) diff --git a/packages/docs/how-it-works.md b/packages/docs/how-it-works.md index 3cd9089da..c17600d66 100644 --- a/packages/docs/how-it-works.md +++ b/packages/docs/how-it-works.md @@ -1,137 +1,88 @@ --- -order: -40 +order: -30 icon: light-bulb --- # How it Works -!!!info -We recommend to read the [tutorial](/tutorial.md) first. -!!! +## Intuition -The Bitcoin Computer is a Javascript runtime environment that uses Bitcoin as a persistence layer. +A Bitcoin Computer transaction is a Bitcoin transaction with a Javascript expression inscribed. The value of the expression is associated with the first output of the transaction. If the value is an object or array that has sub-objects, then each sub-object is associated with a distinct output of the transaction. -## Storing Values - -When an expression is evaluated with the Bitcoin Computer, the expression is inscribed into a Bitcoin transaction. If the value of the expression has object type, this object is considered a "smart object" and an output of the transaction is considered the object's *id*. If the value has multiple sub-objects, each sub-object is assigned a separate output as its id. - -## Reading Values - -To determine the value of a given smart object id, the Bitcoin Computer library will download the corresponding transaction and compute the value of the expression. As the mapping from sub-objects to outputs is deterministic and one-to-one, the software can determine which sub-object of the value is the smart object for the given id. - -## Updating Values +If the expression contains a free variable (for example the variable `x` is free in the expression `x + 1`), then that free variable has to be associated with an input of the transaction. To determine the values of the outputs, the Bitcoin Computer will recursively determine the values of each output spent. The free variable is then substituted with the value before the expression is evaluated. -In order to explain how updating values works we need the notions of "free variable", "environment", and "closure". Consider the Javascript expression: +### Notation -```js -const x = 1; -counter.add(x); -``` +![](/static/legend@1x.png)- +We will use some visual notion in the example that we describe first. White boxes represent transactions and grey boxes represent expressions that are inscribed into the transactions. Inputs and outputs are displayed as circles and spending relations are shown as arrows. -It contains two variables, `x` and `counter`. The variable `x` is defined in the expression and one can determine that the value of `x` is `1`. The variable `counter` is not defined so it is impossible to tell what the value of `counter` is. Such variables are called *free variables*. In order to evaluate an expression with free variables, a definition of the values of the free variables is required. This is what an *environment* does: it maps free variables to values. A *closure* is a pair consisting of an expression and an environment. +To keep the explanation simple, we will pretend that any user (not just miners) can create transactions without inputs. +

-To evaluate an expression $e$ containing free variables $x_1\ ...\ x_n$ with the Bitcoin Computer, the user needs to provide a *Bitcoin environment* $\{ x_1: o_1\ ...\ x_n: o_n \}$ that maps the free variables of $e$ to outputs $o_1\ ...\ o_n$. The Bitcoin Computer will recursively determine the values $v_1\ ...\ v_n$ of the outputs $o_1\ ...\ o_n$ respectively. It then creates a closure consisting of the expression $e$ and the environment $\{ x_1: v_1\ ...\ x_n: v_n \}$ and evaluates this closure with a standard Javascript runtime. +### Example -All sub-objects of the value returned are designated one output of the transaction. We refer to both the outputs as well as the values they represent as *revisions*. Note that when a closure is evaluated, the values $v_1\ ...\ v_n$ can change (for example if $e$ is a function call $f(x_1\ ...\ x_n)$ with side effects). Therefore a these transactions must have outputs that represent the new revisions for these values as well. +-![](/static/int-example@1x.png) +Now consider a transaction with one output and the expression `1+2` inscribed. As this expression evaluates to `3`, the Bitcoin Computer will associate the first output with the value `3`. -The Bitcoin Computer protocol requires that a transaction spends all outputs in the environment. A practical advantage is that this provides a space efficient way to store the environment: Only a list of variable names needs to be stored as meta data and the full environment can be reconstructed from the inputs. It also has two important consequences: It provides a notion of data ownership as it is necessary to be able to spend an output in order to update it's value. And it makes it possible to run the Bitcoin Computer as a light client as the inputs of a transaction contain pointers to the transactions that contain the expressions that need to be evaluated first. +If this output is then spent by a transaction with an inscription `x+4` and the first input is labelled by `x`, the Bitcoin Computer will first determine the value of the output spent by that input. As described above that output is has the value `3`. Hence, the output of the second transaction has the value `7`. +
-## Smart Contract Language +## Data Ownership -The programming language used for the Bitcoin Computer has the exact same syntax as Javascript. However there is one important semantic difference: +The method of associating data values to outputs described above gives rise to a natural notion of data ownership: A piece of data that is stored in an output is owned by all users that can spend that output. This is analogous to how satoshis are owned by the users that can spend the output that store the satoshis. -!!! -All values returned from evaluating an expression that have object type must inherit from `Contract`. -!!! +In the case that a value is an object (as opposed to an array or a basic type), the Bitcoin Computer will add an extra property `_owners` to the object that contains the list of public keys that are owners. Conversely, if an object is created with a property `_owners` that is set to an array of string encoded public keys, the Bitcoin Computer will arrange the transaction so that the Bitcoin script of the output that represents that object can only be spent by the users that control the public keys in the array. -The class `Contract` is exported from the library. It enforces the following properties, which we think turn Javascript into a viable smart contract language. +## Creating Objects and Object Identity -### Assigning Properties Outside of Function Calls is Prohibited +One advantage of associating values with transaction outputs is that the transaction id and output number can be used as an identity for the object. Specifically, whenever an object is created (as in a new memory is allocated) we assign the transaction id and output number to a property called `_id`. The id cannot be reassigned and remains immutable throughout the lifetime of the object. -Assigning to a property outside of a function call throws an error. +## Updating Objects and Object Revisions -This makes it possible to write classes that impose constraints on all future values of an object. Consider for example the class `Even` below. The condition guarantees that all instances of the class will always have an even value. +Whenever a smart object is updated, it's new state is stored in a new output. The transaction id and output number is assigned to a property `_rev` of the object. As any two Bitcoin transactions have distinct ids, each new version of a smart object has a fresh revision. -```js -class Even extends Contract { - inc() { - if (typeof this.n === 'undefined') this.n = 0 - else this.n = this.n + 2 - } -} -``` +## Roots and Families of Objects -While this is not a very useful example for a constraint, all smart contracts are based on constraints to future values in a similar way. +When a new object is created in an expression that is either a constructor call (that is of the form `new C(...)`) or a function call (that is of the form `x.f(...)`) we can keep track of this occurrence. Specifically, the root of an object is it's id if it is not created within a constructor or function call. If it is created in a constructor call it's root is the id of the newly created object. If an object `y` is created within a function call `x.f(...)` the the root of `y` is the root of `x`. -### Keyword Properties Control the Transaction Being Built + -![](/static/legend@1x.png)- -White boxes represent transactions and grey boxes represent expressions that are inscribed into the transactions. Inputs and outputs are displayed as circles and spending relations are shown as arrows. A blockchain environment that maps a free variable $x$ to an output $o$ is shown as a label $x$ in the arrow indicating the spending of $o$. -
-### Storing Values -Consider the code in the picture below. It defines a class `NFT` with two properties `_owners` and `url` and a method to update the `_owners`. The `_owners` property of a smart contract can be set to an array of string encoded public keys. The output that will store that +