Wednesday, May 13, 2026
The BLOCKCHAIN Page
No Result
View All Result
  • Home
  • Cryptocurrency
  • Blockchain
  • Bitcoin
  • Market & Analysis
  • Altcoins
  • DeFi
  • Ethereum
  • Dogecoin
  • XRP
  • Regulations
  • NFTs
The BLOCKCHAIN Page
No Result
View All Result
Home Ethereum

Understanding Serenity, Part I: Abstraction

by admin
January 11, 2024
in Ethereum
0
Dodging a bullet: Ethereum State Problems
0
SHARES
25
VIEWS
Share on FacebookShare on Twitter


Particular due to Gavin Wooden for prompting my curiosity into abstraction enhancements, and Martin Becze, Vlad Zamfir and Dominic Williams for ongoing discussions.

For a very long time we’ve been public about our plans to proceed bettering the Ethereum protocol over time and our lengthy growth roadmap, studying from our errors that we both didn’t have the chance to repair in time for 1.0 or solely realized after the very fact. Nevertheless, the Ethereum protocol growth cycle has began up as soon as once more, with a Homestead launch coming very quickly, and us quietly beginning to develop proof-of-concepts for the most important milestone that we had positioned for ourselves in our development roadmap: Serenity.

Serenity is meant to have two main characteristic units: abstraction, an idea that I initially expanded on in this blog post here, and Casper, our security-deposit-based proof of stake algorithm. Moreover, we’re exploring the concept of including not less than the scaffolding that may enable for the graceful deployment over time of our scalability proposals, and on the similar time fully resolve parallelizability considerations brought up here – an immediate very giant achieve for personal blockchain cases of Ethereum with nodes being run in massively multi-core devoted servers, and even the general public chain may even see a 2-5x enchancment in scalability. Over the previous few months, analysis on Casper and formalization of scalability and abstraction (eg. with EIP 101) have been progressing at a speedy tempo between myself, Vlad Zamfir, Lucius Greg Meredith and some others, and now I’m pleased to announce that the primary proof of idea launch for Serenity, albeit in a really restricted kind appropriate just for testing, is now available.

The PoC may be run by going into the ethereum listing and operating python take a look at.py (make certain to obtain and set up the newest Serpent from https://github.com/ethereum/serpent, develop department); if the output appears to be like one thing like this then you’re high quality:

vub@vub-ThinkPad-X250 15:01:03 serenity/ethereum: python take a look at.py
REVERTING 940534 gasoline from account 0x0000000000000000000000000000000000000000 to account 0x98c78be58d729dcdc3de9efb3428820990e4e3bf with knowledge 0x
Warning (file "casper.se.py", line 74, char 0): Warning: operate return sort inconsistent!
Working with 13 most nodes
Warning (file "casper.se.py", line 74, char 0): Warning: operate return sort inconsistent!
Warning (file "casper.se.py", line 74, char 0): Warning: operate return sort inconsistent!
Size of validation code: 57
Size of account code: 0
Joined with index 0
Size of validation code: 57
Size of account code: 0
Joined with index 1
Size of validation code: 57

It is a simulation of 13 nodes operating the Casper+Serenity protocol at a 5-second block time; that is pretty near the higher restrict of what the shopper can deal with in the intervening time, although notice that (i) that is python, and C++ and Go will seemingly present a lot increased efficiency, and (ii) that is all nodes operating on one pc on the similar time, so in a extra “regular” surroundings it means you’ll be able to anticipate python Casper to have the ability to deal with not less than ~169 nodes (although, alternatively, we would like consensus overhead to be a lot lower than 100% of CPU time, so these two caveats mixed do NOT imply that it is best to anticipate to see Casper operating with hundreds of nodes!). In case your pc is simply too gradual to deal with the 13 nodes, strive python take a look at.py 10 to run the simulation with 10 nodes as an alternative (or python take a look at.py 7 for 7 nodes, and so forth). After all, analysis on bettering Casper’s effectivity, although seemingly at the price of considerably slower convergence to finality, remains to be persevering with, and these issues ought to cut back over time. The community.py file simulates a fundamental P2P community interface; future work will contain swapping this out for precise computer systems operating on an actual community.

The code is break up up into a number of principal recordsdata as follows:

  • serenity_blocks.py – the code that describes the block class, the state class and the block and transaction-level transition capabilities (about 2x less complicated than earlier than)
  • serenity_transactions.py – the code that describes transactions (about 2x less complicated than earlier than)
  • casper.se.py – the serpent code for the Casper contract, which incentivizes appropriate betting
  • wager.py – Casper betting technique and full shopper implementation
  • ecdsa_accounts.py – account code that lets you replicate the account validation performance out there right now in a Serenity context
  • take a look at.py – the testing script
  • config.py – config parameters
  • vm.py – the digital machine (quicker implementation at fastvm.py)
  • community.py – the community simulator

For this text, we’ll deal with the abstraction options and so serenity_blocks.py, ecdsa_accounts.py and serenity_transactions.py are most important; for the following article discussing Casper in Serenity, casper.se.py and wager.py shall be a major focus.

Abstraction and Accounts

At present, there are two kinds of accounts in Ethereum: externally owned accounts, managed by a non-public key, and contracts, managed by code. For externally owned accounts, we specify a specific digital signature algorithm (secp256k1 ECDSA) and a specific sequence quantity (aka. nonce) scheme, the place each transaction should embrace a sequence primary increased than the earlier, to be able to stop replay assaults. The first change that we are going to make to be able to improve abstraction is that this: moderately than having these two distinct kinds of accounts, we’ll now have just one – contracts. There’s additionally a particular “entry level” account, 0x0000000000000000000000000000000000000000, that anybody can ship from by sending a transaction. Therefore, as an alternative of the signature+nonce verification logic of accounts being within the protocol, it’s now as much as the person to place this right into a contract that shall be securing their very own account.

The only type of contract that’s helpful might be the ECDSA verification contract, which merely offers the very same performance that’s out there proper now: transactions move by means of provided that they’ve legitimate signatures and sequence numbers, and the sequence quantity is incremented by 1 if a transaction succeeds. The code for the contract appears to be like as follows:

# We assume that knowledge takes the next schema:
# bytes 0-31: v (ECDSA sig)
# bytes 32-63: r (ECDSA sig)
# bytes 64-95: s (ECDSA sig)
# bytes 96-127: sequence quantity (previously known as "nonce")
# bytes 128-159: gasprice
# bytes 172-191: to
# bytes 192-223: worth
# bytes 224+: knowledge

# Get the hash for transaction signing
~mstore(0, ~txexecgas())
~calldatacopy(32, 96, ~calldatasize() - 96)
~mstore(0, ~sha3(0, ~calldatasize() - 64))
~calldatacopy(32, 0, 96)
# Name ECRECOVER contract to get the sender
~name(5000, 1, 0, 0, 128, 0, 32)
# Verify sender correctness; exception if not
if ~mload(0) != 0x82a978b3f5962a5b0957d9ee9eef472ee55b42f1:
    ~invalid()
# Sequence quantity operations
with minusone = ~sub(0, 1):
    with curseq = self.storage[minusone]:
        # Verify sequence quantity correctness, exception if not
        if ~calldataload(96) != curseq:
            ~invalid()
        # Increment sequence quantity
        self.storage[minusone] = curseq + 1
# Make the sub-call and discard output
with x = ~msize():
    ~name(msg.gasoline - 50000, ~calldataload(160), ~calldataload(192), 160, ~calldatasize() - 224, x, 1000)
    # Pay for gasoline
    ~mstore(0, ~calldataload(128))
    ~mstore(32, (~txexecgas() - msg.gasoline + 50000))
    ~name(12000, ETHER, 0, 0, 64, 0, 0)
    ~return(x, ~msize() - x)

This code would sit because the contract code of the person’s account; if the person desires to ship a transaction, they might ship a transaction (from the zero handle) to this account, encoding the ECDSA signature, the sequence quantity, the gasprice, vacation spot handle, ether worth and the precise transaction knowledge utilizing the encoding specified above within the code. The code checks the signature in opposition to the transaction gasoline restrict and the info offered, after which checks the sequence quantity, and if each are appropriate it then increments the sequence quantity, sends the specified message, after which on the finish sends a second message to pay for gasoline (notice that miners can statically analyze accounts and refuse to course of transactions sending to accounts that shouldn’t have gasoline cost code on the finish).

An essential consequence of that is that Serenity introduces a mannequin the place all transactions (that fulfill fundamental formatting checks) are legitimate; transactions which can be presently “invalid” will in Serenity merely don’t have any impact (the invalid opcode within the code above merely factors to an unused opcode, instantly triggering an exit from code execution). This does imply that transaction inclusion in a block is not a assure that the transaction was really executed; to substitute for this, each transaction now will get a receipt entry that specifies whether or not or not it was efficiently executed, offering considered one of three return codes: 0 (transaction not executed as a consequence of block gasoline restrict), 1 (transaction executed however led to error), 2 (transaction executed efficiently); extra detailed data may be offered if the transaction returns knowledge (which is now auto-logged) or creates its personal logs.

The primary very giant advantage of that is that it offers customers rather more freedom to innovate within the space of account coverage; doable instructions embrace:

  • Bitcoin-style multisig, the place an account expects signatures from a number of public keys on the similar time earlier than sending a transaction, moderately than accepting signatures separately and saving intermediate ends in storage
  • Different elliptic curves, together with ed25519
  • Higher integration for extra superior crypto, eg. ring signatures, threshold signatures, ZKPs
  • Extra superior sequence quantity schemes that enable for increased levels of parallelization, in order that customers can ship many transactions from one account and have them included extra rapidly; assume a mix of a standard sequence quantity and a bitmask. One can even embrace timestamps or block hashes into the validity verify in numerous intelligent methods.
  • UTXO-based token administration – some individuals dislike the truth that Ethereum makes use of accounts as an alternative of Bitcoin’s “unspent transaction output” (UTXO) mannequin for managing token possession, partly for privateness causes. Now, you’ll be able to create a system inside Ethereum that truly is UTXO-based, and Serenity not explicitly “privileges” one over the opposite.
  • Innovation in cost schemes – for some dapps, “contract pays” is a greater mannequin than “sender pays” as senders might not have any ether; now, particular person dapps can implement such fashions, and if they’re written in a means that miners can statically analyze and decide that they really will receives a commission, then they’ll instantly settle for them (basically, this offers what Rootstock is trying to do with non-obligatory author-pays, however in a way more summary and versatile means).
  • Stronger integration for “ethereum alarm clock”-style functions – the verification code for an account would not should verify for signatures, it may additionally verify for Merkle proofs of receipts, state of different accounts, and so forth

In all of those circumstances, the first level is that by means of abstraction all of those different mechanisms change into a lot simpler to code as there is no such thing as a longer a must create a “pass-through layer” to feed the knowledge in by means of Ethereum’s default signature scheme; when no utility is particular, each utility is.

One specific attention-grabbing consequence is that with the present plan for Serenity, Ethereum shall be optionally quantum-safe; in case you are petrified of the NSA accessing a quantum pc, and wish to defend your account extra securely, you’ll be able to personally switch to Lamport signatures at any time. Proof of stake additional bolsters this, as even when the NSA had a quantum pc and nobody else they might not be capable of exploit that to implement a 51% assault. The one cryptographic safety assumption that may exist at protocol degree in Ethereum is collision-resistance of SHA3.

On account of these modifications, transactions are additionally going to change into a lot less complicated. As an alternative of getting 9 fields, as is the case proper now, transactions will solely have 4 fields: vacation spot handle, knowledge, begin gasoline and init code. Vacation spot handle, knowledge and begin gasoline are the identical as they’re now; “init code” is a discipline that may optionally include contract creation code for the handle that you’re sending to.

The explanation for the latter mechanic is as follows. One essential property that Ethereum presently offers is the power to ship to an account earlier than it exists; you do not want to have already got ether to be able to create a contract on the blockchain earlier than you’ll be able to obtain ether. To permit this in Serenity, an account’s handle may be decided from the specified initialization code for the account prematurely, through the use of the method sha3(creator + initcode) % 2**160 the place creator is the account that created the contract (the zero account by default), and initcode is the initialization code for the contract (the output of operating the initcode will change into the contract code, simply as is the case for CREATEs proper now). You possibly can thus generate the initialization code in your contract domestically, compute the handle, and let others ship to that handle. Then, when you wish to ship your first transaction, you embrace the init code within the transaction, and the init code shall be executed mechanically and the account created earlier than continuing to run the precise transaction (you will discover this logic carried out here).

Abstraction and Blocks

One other clear separation that shall be carried out in Serenity is the whole separation of blocks (which at the moment are merely packages of transactions), state (ie. present contract storage, code and account balances) and the consensus layer. Consensus incentivization is finished inside a contract, and consensus-level objects (eg. PoW, bets) must be included as transactions despatched to a “consensus incentive supervisor contract” if one needs to incentivize them.

This could make it a lot simpler to take the Serenity codebase and swap out Casper for any consensus algorithm – Tendermint, HoneyBadgerBFT, subjective consensus and even plain outdated proof of labor; we welcome analysis on this course and goal for optimum flexibility.

Abstraction and Storage

At present, the “state” of the Ethereum system is definitely fairly complicated and contains many elements:

  • Stability, code, nonce and storage of accounts
  • Gasoline restrict, problem, block quantity, timestamp
  • The final 256 block hashes
  • Throughout block execution, the transaction index, receipt tree and the present gasoline used

These knowledge constructions exist in numerous locations, together with the block state transition operate, the state tree, the block header and former block headers. In Serenity, this shall be simplified vastly: though many of those variables will nonetheless exist, they are going to all be moved to specialised contracts in storage; therefore, the ONLY idea of “state” that may live on is a tree, which may mathematically be seen as a mapping {handle: {key: worth} }. Accounts will merely be bushes; account code shall be saved at key “” for every account (not mutable by SSTORE), balances shall be saved in a specialised “ether contract” and sequence numbers shall be left as much as every account to find out learn how to retailer. Receipts may even be moved to storage; they are going to be saved in a “log contract” the place the contents get overwritten each block.

This permits the State object in implementations to be simplified vastly; all that continues to be is a two-level map of tries. The scalability improve might improve this to 3 ranges of tries (shard ID, handle, key) however this isn’t but decided, and even then the complexity shall be considerably smaller than right now.

Word that the transfer of ether right into a contract does NOT represent whole ether abstraction; in truth, it’s arguably not that giant a change from the established order, as opcodes that take care of ether (the worth parameter in CALL, BALANCE, and so forth) nonetheless stay for backward-compatibility functions. Slightly, that is merely a reorganization of how knowledge is saved.

Future Plans

For POC2, the plan is to take abstraction even additional. At present, substantial complexity nonetheless stays within the block and transaction-level state transition operate (eg. updating receipts, gasoline limits, the transaction index, block quantity, stateroots); the aim shall be to create an “entry level” object for transactions which handles all of this further “boilerplate logic” that must be executed per transaction, in addition to a “block begins” and “block ends” entry level. A theoretical final aim is to give you a protocol the place there is just one entry level, and the state transition operate consists of merely sending a message from the zero handle to the entry level containing the block contents as knowledge. The target right here is to scale back the dimensions of the particular consensus-critical shopper implementation as a lot as doable, pushing a most doable quantity of logic immediately into Ethereum code itself; this ensures that Ethereum’s multi-client mannequin can proceed even with an aggressive growth regime that’s keen to simply accept exhausting forks and a point of latest complexity to be able to obtain our objectives of transaction velocity and scalability with out requiring an especially great amount of ongoing growth effort and safety auditing.

In the long term, I intend to proceed producing proof-of-concepts in python, whereas the Casper staff works collectively on bettering the effectivity and proving the protection and correctness of the protocol; in some unspecified time in the future, the protocol shall be mature sufficient to deal with a public testnet of some kind, probably (however not actually) with actual worth on-chain to be able to present stronger incentives for individuals to attempt to “hack” Casper they means that we inevitably anticipate that they are going to as soon as the principle chain goes stay. That is solely an preliminary step, though a vital one because it marks the primary time when the analysis behind proof of stake and abstraction is lastly transferring from phrases, math on whiteboards and weblog posts right into a working implementation written in code.

The following a part of this sequence will talk about the opposite flagship characteristic of Serenity, the Casper consensus algorithm.



Source link

Tags: AbstractionPartSerenityUnderstanding
admin

admin

Recommended

Bitcoin at four-month low: Why is the crypto market down despite market high?

Bitcoin at four-month low: Why is the crypto market down despite market high?

2 years ago
This handy electric screwdriver is now 50% off – here’s where to snag the deal

This handy electric screwdriver is now 50% off – here’s where to snag the deal

1 month ago

Popular News

  • Protocol-Owned Liquidity: A Sustainable Path for DeFi

    Protocol-Owned Liquidity: A Sustainable Path for DeFi

    0 shares
    Share 0 Tweet 0
  • Cryptocurrency for College: Exploring DeFi Scholarship Models

    0 shares
    Share 0 Tweet 0
  • What are rebase tokens, and how do they work?

    0 shares
    Share 0 Tweet 0
  • What is Velodrome Finance (VELO): why it’s a next-gen AMM

    0 shares
    Share 0 Tweet 0
  • $10 XRP Price Envisioned By Fund Manager As Ripple Mounts Trillion-Dollar Payment Markets ⋆ ZyCrypto

    0 shares
    Share 0 Tweet 0

Latest

Sony just gave me a compelling reason to put my AirPods and Bose headphones away

Sony just gave me a compelling reason to put my AirPods and Bose headphones away

May 13, 2026
I set up a $190 mesh Wi-Fi system at home, and it handled a dozen 4K video streams with ease

I set up a $190 mesh Wi-Fi system at home, and it handled a dozen 4K video streams with ease

May 12, 2026

Categories

  • Altcoins
  • Bitcoin
  • Blockchain
  • Cryptocurrency
  • DeFi
  • Dogecoin
  • Ethereum
  • Market & Analysis
  • NFTs & Metaverse
  • Regulations
  • XRP

Follow us

Recommended

  • Sony just gave me a compelling reason to put my AirPods and Bose headphones away
  • I set up a $190 mesh Wi-Fi system at home, and it handled a dozen 4K video streams with ease
  • Linux Mint vs. Elementary OS: I compared both distros, and here’s my advice
  • Ripple Gets Major Boost For Prime Brokerage Growth: $200M Debt Facility Announced
  • XRP NEWS: JPMorgan and Mastercard Leverage XRP Ledger for Tokenized Treasury Redemptions
  • About us
  • Privacy Policy
  • Terms & Conditions

© 2023 TheBlockchainPage | All Rights Reserved

No Result
View All Result
  • Home
  • Cryptocurrency
  • Blockchain
  • Bitcoin
  • Market & Analysis
  • Altcoins
  • DeFi
  • Ethereum
  • Dogecoin
  • XRP
  • Regulations
  • NFTs

© 2023 TheBlockchainPage | All Rights Reserved