Truffle: Ethereum Dapp Development Framework
truffleframework.com
truffleframework.com
I came away with my initial enthusiasm completely dashed. I can't for the life of me imagine why any sane developer would ever want to work within the constraints of Ethereum. It just doesn't seem to me anywhere near ready for any kind of serious development, or even trivial development for that matter.
I'd love to hear rebuttals to this. Is anyone out there doing anything interesting with this platform?
- installing mist and getting it to sync is very difficult and time consuming
- connecting to a testnet and getting ether on the testnet is also very difficult
- most ‘cool’ dapp ideas rely on oracles to publish data about the real world into the block chain. When you dive into it you realize that such an Oracle would be very very expensive to run for even trivial usecases.
how much does it cost to run an Oracle?
For example, if the problem domain is football games and gambling, well, scraping the results of those games from existing apis isn't too hard nor expensive.
If it's based on real-world stuff with no existing consistent API (e.g. you want a app based on housing), you'll either need to build that API, find a company to research and enter the data, etc.
The data is an input to a transaction that eventually results in the EVM storing that data into a contracts (dapps) memory (which you pay per byte) that can then be exposed to other dapps.
Now a MUL costs 5 gas and a ADD costs 3 for example. So you have to pay for contract complexity.
Now memory costs are not linear. The current gas cost equation for memory is Gmem * a * (a^2/512) where Gmem is a constant that is currently 3 and 'a' is the number of 255bit words (ints) you are storing.
This is for EVM internal memory that can later be accessed by the smart contract or other contracts. There is a way for contracts to output data that can be read out-of-band called logs but that is for getting data out of the EVM, not in.
I see it as a lot of room for opportunity, but I could also see how it could be frustrating to some more senior people - but I have found part of growing old and seeing things constantly get re-invented but slightly different are windows of opportunity - so I get excited
what you got against <blink>?
But in seriousness, a Haskell -> solidity compiler, might make it bearable.
You might want to compile directly to EVM instead of through Solidity. The EVM is very simple, as far as virtual machines go. It's fully documented in [the yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf) and only changes with hardforks (and then only incrementally in a backwards compatible way).
Smart contract development feels like embedded systems development. Every instruction has a significant cost associated to it. There are different memory spaces like a Harvard architecture (code, memory, storage, input, output, other peoples code). Like embedded systems, you need to be absolutely sure your code is correct before you deploy, as updates are impossible and a lot of economic value depends on correctness.
But contrary to embedded systems it has 256 bit registers, 256 bit address space and SHA3 as a cheap instruction. This means that if you pick a 'random' hash, you can safely assume it's free! Hashtables in Solidity are implemented like this.
Recently I've been doing some combined Solidity/EVM-assembly that I wrote about [here](https://medium.com/wicketh/mathemagic-chinese-remainder-theo...). I'll post more this month doing some advanced tricks in Solidity/EVM.
For one, do you really want to have a lazy evaluation runtime compiled into your multisig? Now do you want to prove the correctness of that runtime? ...
I don't think Haskell is anywhere near a good source language for Ethereum smart contracts, if you think of it as "compiling Haskell".
There was a master's thesis about compiling Idris to EVM, and it also shows that the performance problems are difficult indeed even without laziness.
https://publications.lib.chalmers.se/records/fulltext/234939...
But I do think it's very interesting to think of Haskell as a powerful metalanguage for defining smart contracts that then get compiled to EVM.
Other examples of Haskell as a DSL environment for generating more restricted programs:
https://hackage.haskell.org/package/accelerate
http://ku-fpg.github.io/software/kansas-lava/
Quote from the Kansas Lava site:
Kansas Lava is a Domain Specific Language (DSL) for expressing hardware-oriented descriptions of computations, and is hosted inside the language Haskell. Kansas Lava programs are descriptions of specific hardware entities, the connections between them, and other computational abstractions that can compile down to these entities. Large circuits have be successfully expressed using Kansas Lava, and Haskell’s powerful abstraction mechanisms, as well as generic generative techniques, can be applied to good effect to provide descriptions of highly efficient circuits.
That's an approach I think is much more appropriate for the strengths and weaknesses of Haskell!
As it happens, we've started very modestly at using Haskell like this. At the moment we only have a simple monadic assembler that lets you write EVM code. See this example:
https://github.com/dapphub/ds-weth/blob/master/src/weth4.hs
Of course we want to take this further and find some more abstractions for cleanly expressing actual smart contract patterns...
What will(is) the crypto 2.0 ?
At least now it's more or less coherent with some good intros and good tutorials.
One thing I do like is having a meaningful incentive to be efficient. Kinda like my earliest days fiddling with assembler as a kid.
I did my fair share of solidity development myself and it was hard for me to find references on simple basic development on the platform. Diff ways to setup, diff sandboxes, no proper introduction of the tools, etc.
Smart contracts encapsulate market logic, i. e. the stuff where market partners have a need to verify that the information (or value) shared was/is processed exactly as specified.
The key insight is to limit your utilisation of smart contracts to this type of application. You want to keep your smart contract super simple and focused on doing only one thing. Also note that marktet logic is almost always just a tiny fraction of the overall business logic of whatever you are building. So there will always be this other place where you develop the rest of your app with more traditional means (e. g. Javascript)
To integrate the blockchain powered market communication bit into your app, you simply wrap your deployed smart contracts into a software wallet such as ethters.js. This makes the solidity methods available in you application as simple js functions via dot notation for example.
Here is an implementation of this: https://github.com/energychain/StromDAO-BusinessObject
you can just `require` the business object in you app and have access to 30 or so smart contracts that fire into a PoA blockchain network called Fury. Its actually quite simple. Take a look at the tests in the github repository. You can even trigger smart contract factories to mint your own preconfigured contracts if need be.
Here is an other example. A subset of the same smart-contracts but implemented withing a command line tool:
https://github.com/energychain/BusinessObject-MeterPointOper...
What you end up with then is a rather traditional app that 'composes' smart contracts to read and write stuff into/out of a blockhain network where appropriate.
It's not as bad as "Riot" (at least 3 projects with this name), but seriously, are we running out of words to name projects?
But really, what does any brand name have to do with what its product actually does? Microsoft might be the most important exception LOL.
Jade/Pug comes to mind. Pug (the HTML templating language) was originally called Jade.
Jade is already a programming language (well, whole environment) made by Jade Software in New Zealand. They literally took the name of another programming language.
* console & web console
* dealing with testrpc and tests is much easier in embark
* better documented and more configurable
* embark CLI more powerful and has help, while truffle almost doesn’t
* truffle has so many trivial bugs that are unresolved for months, usually no even word in reply from developers. Embark developers seem to fix bugs faster.
* integration with IPFS, Whisper OOB.
* probably forgot something else important. Overall experience is so much better with Embark.