Solidity is a new language designed specially for writing Ethereum smart-contracts. As compared with Serpent, which is an extension to Python semantics, Solidity is completely new and borrows semantics from other languages to be JavaScript-like.

What was the motivation for designing the language and features it should have and were any specific tradeoffs made during the process of building it?

  • I think you should post this question to reddit/r/ethereum as this is a question for the developers.
    – T9b
    Commented Apr 12, 2016 at 15:35

1 Answer 1


There's some explanation in the original design proposal here: https://t.co/An1ZpRSu7O .

Basically, it was meant to use some OOP features to provide a convenient abstraction for contracts. Objects' data could be arbitrarily complex through its mapping mechanism. The original design included the ability to specify (and therefore optimise) that mapping. For objects' functions, I leveraged the then-new Ethereum contract ABI specification to synthesise something familiar to OOP practitioners. The introduction of the constant function marker was also quite nice, since it allowed an optimised way of inspecting object state with Solidity logic.

It was meant to be a sophisticated tool for developing contracts that could ultimately give both developers and users good information on what the code did. To help this along, I devised NatSpec, a contract-friendly documentation format, and made that a first-class citizen in Solidity. I also proposed a formal proofing language subset (not yet implemented) in order to maximise the kinds of correctness guarantees that could be made.

I introduced events as a first class citizen into the Solidity language in order to provide a nice abstraction for LOGs similar in form to function calls. Inspiration for that came from the Qt meta-object system's "signals".

One later feature that Christian R. and I figured out together was function modifiers; that allows attributes placed as part of a function signature to make some modifications to the apparent function body. Being a very declarative means of expression, it's an idiom that falls nicely into the contract-oriented programming space.

  • 3
    ^just give him the damn bounty already. He's the creator of the language FFS.
    – VoR0220
    Commented Apr 16, 2016 at 23:18
  • @VoR0220 yeah, the system forces me to wait 24 hours. :-)
    – q9f
    Commented Apr 17, 2016 at 9:30
  • @Gav if you don't mind, you can register your account to claim the bounty.
    – q9f
    Commented Apr 17, 2016 at 9:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.