const data = [ { id: 1, name: 'Fabio Berger + Remco Bloemen', content: '
\n' + '

\n' + '
\n' + '

Fabio\n' + 'Berger + Remco Bloemen

\n' + '

\n' + '
    \n' + '
  1. What type of apps do you\n' + 'build?
  2. \n' + '
\n' + '
    \n' + '
  1. 0x - Decentralized exchange\n' + 'protocol. It is a set of smart contracts that handle standard\n' + 'transactions in an order format.
  2. \n' + '
\n' + '
    \n' + '
  1. The key advantage here is that\n' + 'these smart contracts leads to shared liquidity
  2. \n' + '
\n' + '
    \n' + '
  1. We also achieve increased security\n' + 'and network liquidity through our architecture.
  2. \n' + '
  3. We launched the network in August\n' + '2017.
  4. \n' + '
\n' + '
    \n' + '
  1. It works, but is V1. We are working\n' + 'on V2 which helps people build hybrid stations, supports new token\n' + 'standards, and makes the contract more gas efficient.
  2. \n' + '
  3. V1 only allows humans to create\n' + 'orders; V2 will allow new smart contract to create orders. This is\n' + 'HUGE.
  4. \n' + '
\n' + '
    \n' + '
  1. Notes:
  2. \n' + '
\n' + '
    \n' + '
  1. We’re building the protocol;\n' + 'designing the standard; building dev tools for anyone to build a\n' + 'decentralized exchange.
  2. \n' + '
\n' + '
    \n' + '
  1. Orders may become invalid for any\n' + 'reason:
  2. \n' + '
\n' + '
    \n' + '
  1. Order being filled
  2. \n' + '
  3. Griefing attacks
  4. \n' + '
  5. We’ve now built an OrderWatcher\n' + 'that keeps relayers updated on the state of orders.
  6. \n' + '
\n' + '
    \n' + '
  1. We’re using contract Events as a\n' + 'proxy for state changes.
  2. \n' + '
  3. Can do a diff between state trees\n' + 'and between block headers.
  4. \n' + '
\n' + '
    \n' + '
  1. We also have a set of smart\n' + 'contracts to handle settlement;
  2. \n' + '
\n' + '
    \n' + '
  1. Everyone who wants to trade is\n' + 'setting allowances on a smart contract.
  2. \n' + '
\n' + '
    \n' + '
  1. We want upgradability.
  2. \n' + '
\n' + '
    \n' + '
  1. What are the\n' + 'tools/libraries/frameworks you use?
  2. \n' + '
\n' + '
    \n' + '
  1. EthereumJS / truffle hardwallet\n' + 'provider / Typedoc (to generate documentation) /
  2. \n' + '
  3. We don’t use Truffle\n' + 'anymore
  4. \n' + '
\n' + '
    \n' + '
  1. Not reliable – can have race\n' + 'conditions;
  2. \n' + '
  3. Artifacts don’t allow you to have\n' + 'versions of the contract on different networks
  4. \n' + '
\n' + '
    \n' + '
  1. You don’t run into this stuff if\n' + 'you’re just building a “hello world”
  2. \n' + '
\n' + '
    \n' + '
  1. Overwriting parts of the\n' + 'contracts;
  2. \n' + '
\n' + '
    \n' + '
  1. We rolled our own. It’s open-source\n' + 'but not documented. We have other things that are keeping us\n' + 'busy.
  2. \n' + '
  3. The problem is that Truffle has too\n' + 'much functionality –– we would like to see more of a Unix\n' + 'philosophy.
  4. \n' + '
  5. Cannot support different versions\n' + 'of Solidity.
  6. \n' + '
\n' + '
    \n' + '
  1. Version management doesn’t\n' + 'exist.
  2. \n' + '
\n' + '
    \n' + '
  1. EthPM –– doesn’t have versioning\n' + 'either? It’s going through a big refactor, so we held off. We need\n' + 'the NPM package manager.
  2. \n' + '
  3. We have built a lot of developer\n' + 'tools to interface with the smart contracts ourselves.
  4. \n' + '
  5. We have also built own deployer and\n' + 'migration tool, as truffle’s did not suit our needs.
  6. \n' + '
\n' + '
    \n' + '
  1. What are your biggest\n' + 'frustrations?
  2. \n' + '
\n' + '
    \n' + '
  1. Getting a simple experimental\n' + 'environment up is hard
  2. \n' + '
\n' + '
    \n' + '
  1. Remix is there; but it’s not\n' + 'enough.
  2. \n' + '
\n' + '
    \n' + '
  1. Tracing and profiling is not\n' + 'existent.
  2. \n' + '
\n' + '
    \n' + '
  1. Remix does it, but can’t do it\n' + 'locally.
  2. \n' + '
  3. “Code coverage” tool exists but\n' + 'inserts console.logs in
  4. \n' + '
\n' + '
    \n' + '
  1. Adding up gas costs per line of\n' + 'code.
  2. \n' + '
\n' + '
    \n' + '
  1. Need to do profiling, because gas\n' + 'costs depend on inputs.
  2. \n' + '
\n' + '
    \n' + '
  1. Solidity language\n' + 'itself:
  2. \n' + '
\n' + '
    \n' + '
  1. Crashed the Solidity compiler twice\n' + 'today.
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. AbiEncoderV2 is pretty new and\n' + 'hard to understand/use.
  2. \n' + '
\n' + '
    \n' + '
  1. The code that it produces is\n' + 'inefficient.
  2. \n' + '
  3. There is a stark stack limit in\n' + 'solidity
  4. \n' + '
\n' + '
    \n' + '
  1. All the variables are locally\n' + 'scoped.
  2. \n' + '
  3. Un-intuitive as it is a curly\n' + 'braced language.
  4. \n' + '
  5. The lifecycle hook value_of is\n' + 'within a function.
  6. \n' + '
  7. Can only access top 16 slack slots.\n' + 'Including input and output.
  8. \n' + '
  9. We need to implement a graph\n' + 'coloring register allocator – to find out what the lifetime of the\n' + 'variables is.
  10. \n' + '
\n' + '
    \n' + '
  1. “This stack slot was used in the\n' + 'first half –– the second half you can use”
  2. \n' + '
  3. Or implement register\n' + 'splitting.
  4. \n' + '
\n' + '
    \n' + '
  1. Function inlining is frustrating\n' + 'sometimes:
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. SafeMath –– turns every\n' + 'operator into function call – which is a huge gas sink.
  2. \n' + '
\n' + '
    \n' + '
  1. How Solidity optimizes could be\n' + 'improved:
  2. \n' + '
\n' + '
    \n' + '
  1. It focuses on the code size (which\n' + 'makes sense since it’s minimizing the state tree); but sometimes\n' + 'you need to optimize size of tx gas (e.g. 0x needs optimized\n' + 'fillOrder call)
  2. \n' + '
\n' + '
    \n' + '
  1. ABI doesn’t implement\n' + 'introspection
  2. \n' + '
\n' + '
    \n' + '
  1. EIP 165
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. “does this contract implement\n' + 'ERC20, or ERC223?”
  2. \n' + '
\n' + '
    \n' + '
  1. Solidity should have this\n' + 'in-built.
  2. \n' + '
\n' + '
    \n' + '
  1. Should be built into the API spec\n' + 'and compiler.
  2. \n' + '
\n' + '
    \n' + '
  1. Inheritance:
  2. \n' + '
\n' + '
    \n' + '
  1. Interface or abstract contract –\n' + 'e.g. Solidity automatically creates getters for state functions ––\n' + 'collides with
  2. \n' + '
  3. Contract which implements an\n' + 'interface – public or external for abstract functions – they\n' + 'collide
  4. \n' + '
\n' + '
    \n' + '
  1. ERCs – there is not a formal way to\n' + 'describe the interface for contracts.
  2. \n' + '
\n' + '
    \n' + '
  1. Have a standard repo –– this will\n' + 'lead to a canonical ABI definition –– can have semantic rules\n' + 'around this. Could run some specific unit tests against
  2. \n' + '
\n' + '
    \n' + '
  1. How do you handle\n' + 'testing?
  2. \n' + '
\n' + '
    \n' + '
  1. Testrpc has gotten better\n' + '––
  2. \n' + '
\n' + '
    \n' + '
  1. Increases the speed at which you\n' + 'can dev.
  2. \n' + '
\n' + '
    \n' + '
  1. Blockstream is really cool. Written\n' + 'by Mica (from Augur?), under the EthereumJS lib.
  2. \n' + '
  3. Good dealing with block re-orgs and\n' + 'changes in state.
  4. \n' + '
  5. Continuous Integration:
  6. \n' + '
\n' + '
    \n' + '
  1. Doesn’t really work for smart\n' + 'contracts.
  2. \n' + '
  3. We just use testrpc.
  4. \n' + '
  5. Neufund was different than\n' + '0x:
  6. \n' + '
\n' + '
    \n' + '
  1. Neufund was a trustee for tokens ––\n' + 'it was centralized by definition.
  2. \n' + '
  3. This made it simpler: I could\n' + 'create “open-ended” contracts –– a switch statement, that the\n' + 'default would send to another proxy contract.
  4. \n' + '
  5. But wouldn’t be able to do this\n' + 'with 0x –– e.g. if we wanted to add Shnorr signatures –– because\n' + 'it’s a governance / security issues.
  6. \n' + '
\n' + '
    \n' + '
  1. How do you handle smart contract\n' + 'verification and security?
  2. \n' + '
\n' + '
    \n' + '
  1. Code audits before\n' + 'deployment
  2. \n' + '
  3. Want to add a formal verification\n' + 'tool to our deployment tool.
  4. \n' + '
\n' + '
    \n' + '
  1. By analyzing the code, you can find\n' + 'patterns.
  2. \n' + '
\n' + '
    \n' + '
  1. I manually did an audit in v0 of\n' + '0x:
  2. \n' + '
\n' + '
    \n' + '
  1. Make sure all functions have a\n' + '“Read -> Write -> External Call” pattern, so you don’t have\n' + 'any race conditions.
  2. \n' + '
\n' + '
    \n' + '
  1. Other bounties?
  2. \n' + '
\n' + '
    \n' + '
  1. Rest of the bounties from\n' + 'Remco
  2. \n' + '
  3. State-watching –– built-in\n' + 'diff’ing of state trees
  4. \n' + '
\n' + '
    \n' + '
  1. Should be implemented in the\n' + 'Ethereum clients – Geth and Rust.
  2. \n' + '
  3. They want this feature for\n' + 'OrderWatcher.
  4. \n' + '
\n' + '
    \n' + '
  1. EIP process is\n' + 'suboptimal:
  2. \n' + '
\n' + '
    \n' + '
  1. Lacks in consensus-building.\n' + 'There’s vocal people who don’t have good ideas; there’s a lot of\n' + 'noise.
  2. \n' + '
  3. To improve: committee-based\n' + 'approach (reputable stakeholders from reputable projects who get\n' + 'together?).
  4. \n' + '
  5. Problems are getting solved at the\n' + 'wrong abstraction level.
  6. \n' + '
\n' + '
    \n' + '
  1. E.g. NFT standards.
  2. \n' + '
\n' + '
    \n' + '
  1. Neufund was largest Solidity\n' + 'project before –– tokenized equity.
  2. \n' + '
\n' + '
    \n' + '
  1. You want a EuroToken. You don’t\n' + 'want your company valuated in Ether.
  2. \n' + '
  3. What if blockchain forks; which\n' + 'token is actually tied to the company?
  4. \n' + '
\n' + '
    \n' + '
  1. Bounty approach gives many\n' + 'different styles within the codebase.
  2. \n' + '
\n' + '
    \n' + '
  1. This is a problem; e.g. OpenSSL\n' + 'codebase after Masters / PhDs.
  2. \n' + '
\n' + '

', }, { id: 2, name: 'Leo Logvinov', content: '
\n' + '

\n' + '
\n' + '

Leo\n' + 'Logvinov

\n' + '

4/24/2018 - Robbie, Parker,\n' + 'Andy

\n' + '

\n' + '
    \n' + '
  1. Who are you and what are you\n' + 'working on?
  2. \n' + '
\n' + '
    \n' + '
  1. Started in blockchain 2 years ago\n' + 'in Berlin, working on Ethereum devtools, building solidity plugin\n' + 'for IntelliJ, built by him and an Australian.
  2. \n' + '
  3. Working on truffle, did some PRs,\n' + 'improving speed, usability, error handling.
  4. \n' + '
  5. Started working on 0x, primary\n' + 'role: devtools team.
  6. \n' + '
\n' + '
    \n' + '
  1. What are your biggest\n' + 'frustrations?        
  2. \n' + '
\n' + '
    \n' + '
  1. Event watching - unreliable, no\n' + 'support for backfills etc.
  2. \n' + '
  3. Build tool for statically typed\n' + 'contract (ABI gen that generates contracts), build out the\n' + 'statically typed libraries
  4. \n' + '
  5. Negative experience with web3js\n' + 'team - unresponsive.
  6. \n' + '
  7. Frustrated with truffle because it\n' + 'is hard to contribute with so many packages these days.
  8. \n' + '
\n' + '
    \n' + '
  1. Hard to debug and understand it all\n' + '- so needed a smaller truffle for the specific use\n' + 'cases.
  2. \n' + '
  3. Need to standardise their artifact\n' + 'format (currently in talks about it).
  4. \n' + '
\n' + '
    \n' + '
  1. Solidity coverage tool: built at\n' + 'hackathon (at least the profiler which is not super useful),\n' + 'standardise on artifacts format so that it works across\n' + 'tools.
  2. \n' + '
\n' + '
    \n' + '
  1. Which line of solidity is covered\n' + 'by tests?
  2. \n' + '
\n' + '
    \n' + '
  1. EIP712 - standardised signing for\n' + 'structured data, also helped finalise 721 at ETHDenver.
  2. \n' + '
  3. Solidity plugin for\n' + 'IntelliJ IDE
  4. \n' + '
\n' + '
    \n' + '
  1. One did not exist at the time. Did\n' + 'not have too much stuff in it really: simple formatting,\n' + 'definitions, highlighting. Not “a super interesting” project, but\n' + 'has 36 000 users (some duplicates).
  2. \n' + '
\n' + '
    \n' + '
  1. VMs
  2. \n' + '
\n' + '
    \n' + '
  1. Been wanting to speed up tests\n' + 'recently. Bottleneck is code execution in Ganache VM (90%). We want\n' + 'to get down to 1-10s test runs.
  2. \n' + '
  3. GAS PRICES ARE NOT THE SAME!!!!\n' + 'Arghhhhh!
  4. \n' + '
  5. We need JIT compilation in more\n' + 'performant language (currently just executed in JS).
  6. \n' + '
  7. Project called EthJIT VM,\n' + 'transpiles to LLL, then optimizes contract so that it is\n' + 'precompiled and then runs much faster.
  8. \n' + '
\n' + '
    \n' + '
  1. Would be great to see the\n' + 'integrated in ganache (snapshots and time travel make this a nice\n' + 'tool than geth to use currently).
  2. \n' + '
  3. Even better to have pluggable VMs,\n' + 'have spoken to the Foundation about this too.
  4. \n' + '
\n' + '
    \n' + '
  1. What tools don’t exist at the\n' + 'moment?
  2. \n' + '
\n' + '
    \n' + '
  1. Prettier type plugin for\n' + 'solidity. I don’t have time to write it but\n' + 'Prettier has a good API.
  2. \n' + '
\n' + '
    \n' + '
  1. Other bounties?
  2. \n' + '
\n' + '
    \n' + '
  1. There is a limit on local variable\n' + 'numbers (have a limit of 16, which influences how you write the\n' + 'code).
  2. \n' + '
\n' + '
    \n' + '
  1. Solidity doesn’t push variables\n' + 'down the stack, so you can’t go more than 16 deep. This is an\n' + 'implementation detail in current compiler that needs to be\n' + 'improved.
  2. \n' + '
\n' + '
    \n' + '
  1. ABIv2 - experimental feature for\n' + 'half a year or so - return structures and bus structures as\n' + 'parameters. 0x are planning to use it to make their code easier to\n' + 'audit especially.
  2. \n' + '
\n' + '
    \n' + '
  1. C++ devs needed
  2. \n' + '
\n' + '
    \n' + '
  1. Other domain specific\n' + 'questions?
  2. \n' + '
\n' + '
    \n' + '
  1. What has your experience been\n' + 'like working on EIPS?
  2. \n' + '
\n' + '
    \n' + '
  1. Working on EIP 712 - signing\n' + 'structured and typed data
  2. \n' + '
  3. Quite hard with monetary prospects\n' + 'and no established legislation process - need better ways of\n' + 'governing and enforcing the process.
  4. \n' + '
\n' + '
    \n' + '
  1. Really helped to have everyone in\n' + 'one room at ETHDenver and align on angles of attack.
  2. \n' + '
  3. Room at ETHDenver from commenting\n' + 'on a thread in GH. Started unstructured and moved into structured\n' + 'discussion by defining the interface, which helped identify all the\n' + 'different parties’ motivations. This revealed some inertia on some\n' + 'teams’ behalf, which was interesting to see.
  4. \n' + '
  5. Lot of discussions about metadata\n' + '(of tokens, which is also important for other parts of\n' + 'tokens)
  6. \n' + '
  7. GH PRs are one single wall of text\n' + 'and the comments need to be better moderated, especially for trolls\n' + 'or tangential discussions/ideas (especially tangential ideas need\n' + 'to be collapsed).
  8. \n' + '
  9. Creators need to moderate/create a\n' + 'TL;DR section to help people better and more easily grasp what they\n' + 'are working on.
  10. \n' + '
\n' + '
    \n' + '
  1. Solidity code coverage - how\n' + 'does that work?
  2. \n' + '
\n' + '
    \n' + '
  1. Before each line calling eval, and\n' + 'modifying Eth and ganache code to read the events, much below the\n' + 'current block gas limit and working through everything that comes\n' + 'through.
  2. \n' + '
  3. Take debug transaction with list of\n' + 'opcodes. Also have the source maps, which map back from opcodes to\n' + 'lines of solidity code, and can use that the work backwards from\n' + 'opcodes to understand exactly which line used how much\n' + 'gas.
  4. \n' + '
  5. How do you get the trace after each\n' + 'tx?
  6. \n' + '
\n' + '
    \n' + '
  1. We wrote our own provider, whenever\n' + 'call to eth_sendTransaction gone through provider it sends it and\n' + 'then gets the trace.
  2. \n' + '
\n' + '
    \n' + '
  1. Calls don’t have traces though, so\n' + 'need to do a snapshot and then send the call as a tx, which gives\n' + 'you the trace back and then you can look at what happened in the\n' + 'call.
  2. \n' + '
  3. Did look at other tools, but felt\n' + 'the performance and reliability of those tools just kinda\n' + 'sucked.
  4. \n' + '
\n' + '
    \n' + '
  1. Can you tell us more about\n' + 'Event Watching? 
  2. \n' + '
\n' + '
    \n' + '
  1. Lacking good open source\n' + 'project[a]
  2. \n' + '
  3. People don’t have stateful nodes,\n' + 'you need to handle events client side
  4. \n' + '
  5. Ethereum-js blockstream enables us\n' + 'to use stateless nodes after installing all filters. Still not a\n' + 'part of web3.
  6. \n' + '
\n' + '
    \n' + '
  1. Working on something called\n' + 'order-watcher: track when the order becomes invalid. Which happens\n' + 'when the user manipulates things. You can validate reactively by\n' + 'watching for events, but you want to actually watch balance changes\n' + 'and events are just an imperfect proxy for this.
  2. \n' + '
  3. People can mint and burn tokens and\n' + 'change balance without emitting events.
  4. \n' + '
  5. Want to track changes in balances,\n' + 'not events. balanceOf() is view function that returns the balance,\n' + 'so we want to track the result of calling that.
  6. \n' + '
  7. Might be inefficient to look at\n' + 'that directly, or we can register callbacks and recompute only when\n' + 'the state used by that function changes.
  8. \n' + '
  9. But how do we know when state\n' + 'changes?
  10. \n' + '
  11. Cannot rely on solidity, but can\n' + 'run function, get trace, see which storage slots the function is\n' + 'reading, and then you for sure know that this function will only\n' + 'change its value when one of those storage slots\n' + 'changes.
  12. \n' + '
  13. Use Patricia tries somehow to watch\n' + 'these storage slots and state changes - allow you to watch\n' + 'efficiently changes on view and pure functions.
  14. \n' + '
  15. Check out EIP 781:\n' + '\n' + 'https://github.com/ethereum/EIPs/issues/781 
  16. \n' + '
\n' + '
    \n' + '
  1. Can you tell us more about ABI\n' + 'gen for statically typed contracts?
  2. \n' + '
\n' + '
    \n' + '
  1. Contracts need to be checked at\n' + 'compile times to ensure parameters etc (strong instead of number or\n' + 'something like that) and being statically typed is much easier to\n' + 'check this.
  2. \n' + '
  3. Inspired by geth\n' + 'tooling, and there are\n' + 'also some JS ones (salt-size etc) but were all very opinionated and\n' + 'made all sorts of assumptions about how you wanted to use your\n' + 'contracts.
  4. \n' + '
  5. With 0x tool: Consensys is using\n' + 'it, Sybil (journalism tools, also with typescript\n' + 'contracts).
  6. \n' + '
  7. Using ethers.js for backend of\n' + 'contracts due to issues with web3 versions (classic).
  8. \n' + '
\n' + '
    \n' + '
  1. Best ideas to have in a\n' + 'debugger?
  2. \n' + '
\n' + '
    \n' + '
  1. Not writing solidity actively at\n' + 'the moment and I haven’t used one yet because it is such a high\n' + 'level tool (haha).
  2. \n' + '
  3. I feel that this is quite a long\n' + 'way away right now.
  4. \n' + '
  5. Need bytecode, source code, source\n' + 'maps, traces, interruptable VM etc.
  6. \n' + '
\n' + '
    \n' + '
  1. Can you tell us more about\n' + 'signing data in Ethereum?
  2. \n' + '
\n' + '
    \n' + '
  1. Arbitrary string that people were\n' + 'supposed to sign, but then people figured that you could use it to\n' + 'send ETH, hence the weird prefix that got implemented - not an EIP,\n' + 'it is just a bugfix.
  2. \n' + '
  3. If there is a way to display user\n' + 'data and get them to understand the transaction fully, then they\n' + 'would surely not sign. Prefix doesn’t solve anything, it just\n' + 'postpones the problem.
  4. \n' + '
\n' + '
\n' + '

[a]WE can do more research here -- this is a big\n' + 'bounty

\n' + '
', }, { id: 3, name: 'Axel Ericsson', content: '
\n' + '

\n' + '
\n' + '

Axel Ericsson

\n' + '

\n' + '
    \n' + '
  1. What type of apps do you\n' + 'build?
  2. \n' + '
\n' + '
    \n' + '
  1. 0x - Decentralized exchange\n' + 'protocol. It is a set of smart contracts that handle standard\n' + 'transactions in an order format.
  2. \n' + '
\n' + '
    \n' + '
  1. The key advantage here is that\n' + 'these smart contracts leads to shared liquidity
  2. \n' + '
\n' + '
    \n' + '
  1. We also achieve increased security\n' + 'and network liquidity through our architecture.
  2. \n' + '
  3. We launched the network in August\n' + '2017.
  4. \n' + '
\n' + '
    \n' + '
  1. It works, but is V1. We are working\n' + 'on V2 which helps people build hybrid stations, supports new token\n' + 'standards, and makes the contract more gas efficient.
  2. \n' + '
  3. V1 only allows humans to create\n' + 'orders; V2 will allow new smart contract to create orders. This is\n' + 'HUGE.
  4. \n' + '
\n' + '
    \n' + '
  1. Notes:
  2. \n' + '
\n' + '
    \n' + '
  1. We’re building the protocol;\n' + 'designing the standard; building dev tools for anyone to build a\n' + 'decentralized exchange.
  2. \n' + '
\n' + '
    \n' + '
  1. Orders may become invalid for any\n' + 'reason:
  2. \n' + '
\n' + '
    \n' + '
  1. Order being filled
  2. \n' + '
  3. Griefing attacks
  4. \n' + '
  5. We’ve now built an OrderWatcher\n' + 'that keeps relayers updated on the state of orders.
  6. \n' + '
\n' + '
    \n' + '
  1. We’re using contract Events as a\n' + 'proxy for state changes.
  2. \n' + '
  3. Can do a diff between state trees\n' + 'and between block headers.
  4. \n' + '
\n' + '
    \n' + '
  1. We also have a set of smart\n' + 'contracts to handle settlement;
  2. \n' + '
\n' + '
    \n' + '
  1. Everyone who wants to trade is\n' + 'setting allowances on a smart contract.
  2. \n' + '
\n' + '
    \n' + '
  1. We want upgradability.
  2. \n' + '
\n' + '
    \n' + '
  1. What are the\n' + 'tools/libraries/frameworks you use?
  2. \n' + '
\n' + '
    \n' + '
  1. EthereumJS / truffle hardwallet\n' + 'provider / Typedoc (to generate documentation) /
  2. \n' + '
  3. We don’t use Truffle\n' + 'anymore
  4. \n' + '
\n' + '
    \n' + '
  1. Not reliable – can have race\n' + 'conditions;
  2. \n' + '
  3. Artifacts don’t allow you to have\n' + 'versions of the contract on different networks
  4. \n' + '
\n' + '
    \n' + '
  1. You don’t run into this stuff if\n' + 'you’re just building a “hello world”
  2. \n' + '
\n' + '
    \n' + '
  1. Overwriting parts of the\n' + 'contracts;
  2. \n' + '
\n' + '
    \n' + '
  1. We rolled our own. It’s open-source\n' + 'but not documented. We have other things that are keeping us\n' + 'busy.
  2. \n' + '
  3. The problem is that Truffle has too\n' + 'much functionality –– we would like to see more of a Unix\n' + 'philosophy.
  4. \n' + '
  5. Cannot support different versions\n' + 'of Solidity.
  6. \n' + '
\n' + '
    \n' + '
  1. Version management doesn’t\n' + 'exist.
  2. \n' + '
\n' + '
    \n' + '
  1. EthPM –– doesn’t have versioning\n' + 'either? It’s going through a big refactor, so we held off. We need\n' + 'the NPM package manager.
  2. \n' + '
  3. We have built a lot of developer\n' + 'tools to interface with the smart contracts ourselves.
  4. \n' + '
  5. We have also built own deployer and\n' + 'migration tool, as truffle’s did not suit our needs.
  6. \n' + '
\n' + '
    \n' + '
  1. What are your biggest\n' + 'frustrations?
  2. \n' + '
\n' + '
    \n' + '
  1. Getting a simple experimental\n' + 'environment up is hard
  2. \n' + '
\n' + '
    \n' + '
  1. Remix is there; but it’s not\n' + 'enough.
  2. \n' + '
\n' + '
    \n' + '
  1. Tracing and profiling is not\n' + 'existent.
  2. \n' + '
\n' + '
    \n' + '
  1. Remix does it, but can’t do it\n' + 'locally.
  2. \n' + '
  3. “Code coverage” tool exists but\n' + 'inserts console.logs in
  4. \n' + '
\n' + '
    \n' + '
  1. Adding up gas costs per line of\n' + 'code.
  2. \n' + '
\n' + '
    \n' + '
  1. Need to do profiling, because gas\n' + 'costs depend on inputs.
  2. \n' + '
\n' + '
    \n' + '
  1. Solidity language\n' + 'itself:
  2. \n' + '
\n' + '
    \n' + '
  1. Crashed the Solidity compiler twice\n' + 'today.
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. AbiEncoderV2 is pretty new and\n' + 'hard to understand/use.
  2. \n' + '
\n' + '
    \n' + '
  1. The code that it produces is\n' + 'inefficient.
  2. \n' + '
  3. There is a stark stack limit in\n' + 'solidity
  4. \n' + '
\n' + '
    \n' + '
  1. All the variables are locally\n' + 'scoped.
  2. \n' + '
  3. Un-intuitive as it is a curly\n' + 'braced language.
  4. \n' + '
  5. The lifecycle hook value_of is\n' + 'within a function.
  6. \n' + '
  7. Can only access top 16 slack slots.\n' + 'Including input and output.
  8. \n' + '
  9. We need to implement a graph\n' + 'coloring register allocator – to find out what the lifetime of the\n' + 'variables is.
  10. \n' + '
\n' + '
    \n' + '
  1. “This stack slot was used in the\n' + 'first half –– the second half you can use”
  2. \n' + '
  3. Or implement register\n' + 'splitting.
  4. \n' + '
\n' + '
    \n' + '
  1. Function inlining is frustrating\n' + 'sometimes:
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. SafeMath –– turns every\n' + 'operator into function call – which is a huge gas sink.
  2. \n' + '
\n' + '
    \n' + '
  1. How Solidity optimizes could be\n' + 'improved:
  2. \n' + '
\n' + '
    \n' + '
  1. It focuses on the code size (which\n' + 'makes sense since it’s minimizing the state tree); but sometimes\n' + 'you need to optimize size of tx gas (e.g. 0x needs optimized\n' + 'fillOrder call)
  2. \n' + '
\n' + '
    \n' + '
  1. ABI doesn’t implement\n' + 'introspection
  2. \n' + '
\n' + '
    \n' + '
  1. EIP 165
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. “does this contract implement\n' + 'ERC20, or ERC223?”
  2. \n' + '
\n' + '
    \n' + '
  1. Solidity should have this\n' + 'in-built.
  2. \n' + '
\n' + '
    \n' + '
  1. Should be built into the API spec\n' + 'and compiler.
  2. \n' + '
\n' + '
    \n' + '
  1. Inheritance:
  2. \n' + '
\n' + '
    \n' + '
  1. Interface or abstract contract –\n' + 'e.g. Solidity automatically creates getters for state functions ––\n' + 'collides with
  2. \n' + '
  3. Contract which implements an\n' + 'interface – public or external for abstract functions – they\n' + 'collide
  4. \n' + '
\n' + '
    \n' + '
  1. ERCs – there is not a formal way to\n' + 'describe the interface for contracts.
  2. \n' + '
\n' + '
    \n' + '
  1. Have a standard repo –– this will\n' + 'lead to a canonical ABI definition –– can have semantic rules\n' + 'around this. Could run some specific unit tests against
  2. \n' + '
\n' + '
    \n' + '
  1. How do you handle\n' + 'testing?
  2. \n' + '
\n' + '
    \n' + '
  1. Testrpc has gotten better\n' + '––
  2. \n' + '
\n' + '
    \n' + '
  1. Increases the speed at which you\n' + 'can dev.
  2. \n' + '
\n' + '
    \n' + '
  1. Blockstream is really cool. Written\n' + 'by Mica (from Augur?), under the EthereumJS lib.
  2. \n' + '
  3. Good dealing with block re-orgs and\n' + 'changes in state.
  4. \n' + '
  5. Continuous Integration:
  6. \n' + '
\n' + '
    \n' + '
  1. Doesn’t really work for smart\n' + 'contracts.
  2. \n' + '
  3. We just use testrpc.
  4. \n' + '
  5. Neufund was different than\n' + '0x:
  6. \n' + '
\n' + '
    \n' + '
  1. Neufund was a trustee for tokens ––\n' + 'it was centralized by definition.
  2. \n' + '
  3. This made it simpler: I could\n' + 'create “open-ended” contracts –– a switch statement, that the\n' + 'default would send to another proxy contract.
  4. \n' + '
  5. But wouldn’t be able to do this\n' + 'with 0x –– e.g. if we wanted to add Shnorr signatures –– because\n' + 'it’s a governance / security issues.
  6. \n' + '
\n' + '
    \n' + '
  1. How do you handle smart contract\n' + 'verification and security?
  2. \n' + '
\n' + '
    \n' + '
  1. Code audits before\n' + 'deployment
  2. \n' + '
  3. Want to add a formal verification\n' + 'tool to our deployment tool.
  4. \n' + '
\n' + '
    \n' + '
  1. By analyzing the code, you can find\n' + 'patterns.
  2. \n' + '
\n' + '
    \n' + '
  1. I manually did an audit in v0 of\n' + '0x:
  2. \n' + '
\n' + '
    \n' + '
  1. Make sure all functions have a\n' + '“Read -> Write -> External Call” pattern, so you don’t have\n' + 'any race conditions.
  2. \n' + '
\n' + '
    \n' + '
  1. Other bounties?
  2. \n' + '
\n' + '
    \n' + '
  1. Rest of the bounties from\n' + 'Remco
  2. \n' + '
  3. State-watching –– built-in\n' + 'diff’ing of state trees
  4. \n' + '
\n' + '
    \n' + '
  1. Should be implemented in the\n' + 'Ethereum clients – Geth and Rust.
  2. \n' + '
  3. They want this feature for\n' + 'OrderWatcher.
  4. \n' + '
\n' + '
    \n' + '
  1. EIP process is\n' + 'suboptimal:
  2. \n' + '
\n' + '
    \n' + '
  1. Lacks in consensus-building.\n' + 'There’s vocal people who don’t have good ideas; there’s a lot of\n' + 'noise.
  2. \n' + '
  3. To improve: committee-based\n' + 'approach (reputable stakeholders from reputable projects who get\n' + 'together?).
  4. \n' + '
  5. Problems are getting solved at the\n' + 'wrong abstraction level.
  6. \n' + '
\n' + '
    \n' + '
  1. E.g. NFT standards.
  2. \n' + '
\n' + '
    \n' + '
  1. Neufund was largest Solidity\n' + 'project before –– tokenized equity.
  2. \n' + '
\n' + '
    \n' + '
  1. You want a EuroToken. You don’t\n' + 'want your company valuated in Ether.
  2. \n' + '
  3. What if blockchain forks; which\n' + 'token is actually tied to the company?
  4. \n' + '
\n' + '
    \n' + '
  1. Bounty approach gives many\n' + 'different styles within the codebase.
  2. \n' + '
\n' + '
    \n' + '
  1. This is a problem; e.g. OpenSSL\n' + 'codebase after Masters / PhDs.
  2. \n' + '
\n' + '

', }, { id: 4, name: 'Fernando Smith', content: '
\n' + '

\n' + '
\n' + '

Fernando Smith

\n' + '

\n' + '
    \n' + '
  1. What type of apps do you\n' + 'build?
  2. \n' + '
\n' + '
    \n' + '
  1. 0x - Decentralized exchange\n' + 'protocol. It is a set of smart contracts that handle standard\n' + 'transactions in an order format.
  2. \n' + '
\n' + '
    \n' + '
  1. The key advantage here is that\n' + 'these smart contracts leads to shared liquidity
  2. \n' + '
\n' + '
    \n' + '
  1. We also achieve increased security\n' + 'and network liquidity through our architecture.
  2. \n' + '
  3. We launched the network in August\n' + '2017.
  4. \n' + '
\n' + '
    \n' + '
  1. It works, but is V1. We are working\n' + 'on V2 which helps people build hybrid stations, supports new token\n' + 'standards, and makes the contract more gas efficient.
  2. \n' + '
  3. V1 only allows humans to create\n' + 'orders; V2 will allow new smart contract to create orders. This is\n' + 'HUGE.
  4. \n' + '
\n' + '
    \n' + '
  1. Notes:
  2. \n' + '
\n' + '
    \n' + '
  1. We’re building the protocol;\n' + 'designing the standard; building dev tools for anyone to build a\n' + 'decentralized exchange.
  2. \n' + '
\n' + '
    \n' + '
  1. Orders may become invalid for any\n' + 'reason:
  2. \n' + '
\n' + '
    \n' + '
  1. Order being filled
  2. \n' + '
  3. Griefing attacks
  4. \n' + '
  5. We’ve now built an OrderWatcher\n' + 'that keeps relayers updated on the state of orders.
  6. \n' + '
\n' + '
    \n' + '
  1. We’re using contract Events as a\n' + 'proxy for state changes.
  2. \n' + '
  3. Can do a diff between state trees\n' + 'and between block headers.
  4. \n' + '
\n' + '
    \n' + '
  1. We also have a set of smart\n' + 'contracts to handle settlement;
  2. \n' + '
\n' + '
    \n' + '
  1. Everyone who wants to trade is\n' + 'setting allowances on a smart contract.
  2. \n' + '
\n' + '
    \n' + '
  1. We want upgradability.
  2. \n' + '
\n' + '
    \n' + '
  1. What are the\n' + 'tools/libraries/frameworks you use?
  2. \n' + '
\n' + '
    \n' + '
  1. EthereumJS / truffle hardwallet\n' + 'provider / Typedoc (to generate documentation) /
  2. \n' + '
  3. We don’t use Truffle\n' + 'anymore
  4. \n' + '
\n' + '
    \n' + '
  1. Not reliable – can have race\n' + 'conditions;
  2. \n' + '
  3. Artifacts don’t allow you to have\n' + 'versions of the contract on different networks
  4. \n' + '
\n' + '
    \n' + '
  1. You don’t run into this stuff if\n' + 'you’re just building a “hello world”
  2. \n' + '
\n' + '
    \n' + '
  1. Overwriting parts of the\n' + 'contracts;
  2. \n' + '
\n' + '
    \n' + '
  1. We rolled our own. It’s open-source\n' + 'but not documented. We have other things that are keeping us\n' + 'busy.
  2. \n' + '
  3. The problem is that Truffle has too\n' + 'much functionality –– we would like to see more of a Unix\n' + 'philosophy.
  4. \n' + '
  5. Cannot support different versions\n' + 'of Solidity.
  6. \n' + '
\n' + '
    \n' + '
  1. Version management doesn’t\n' + 'exist.
  2. \n' + '
\n' + '
    \n' + '
  1. EthPM –– doesn’t have versioning\n' + 'either? It’s going through a big refactor, so we held off. We need\n' + 'the NPM package manager.
  2. \n' + '
  3. We have built a lot of developer\n' + 'tools to interface with the smart contracts ourselves.
  4. \n' + '
  5. We have also built own deployer and\n' + 'migration tool, as truffle’s did not suit our needs.
  6. \n' + '
\n' + '
    \n' + '
  1. What are your biggest\n' + 'frustrations?
  2. \n' + '
\n' + '
    \n' + '
  1. Getting a simple experimental\n' + 'environment up is hard
  2. \n' + '
\n' + '
    \n' + '
  1. Remix is there; but it’s not\n' + 'enough.
  2. \n' + '
\n' + '
    \n' + '
  1. Tracing and profiling is not\n' + 'existent.
  2. \n' + '
\n' + '
    \n' + '
  1. Remix does it, but can’t do it\n' + 'locally.
  2. \n' + '
  3. “Code coverage” tool exists but\n' + 'inserts console.logs in
  4. \n' + '
\n' + '
    \n' + '
  1. Adding up gas costs per line of\n' + 'code.
  2. \n' + '
\n' + '
    \n' + '
  1. Need to do profiling, because gas\n' + 'costs depend on inputs.
  2. \n' + '
\n' + '
    \n' + '
  1. Solidity language\n' + 'itself:
  2. \n' + '
\n' + '
    \n' + '
  1. Crashed the Solidity compiler twice\n' + 'today.
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. AbiEncoderV2 is pretty new and\n' + 'hard to understand/use.
  2. \n' + '
\n' + '
    \n' + '
  1. The code that it produces is\n' + 'inefficient.
  2. \n' + '
  3. There is a stark stack limit in\n' + 'solidity
  4. \n' + '
\n' + '
    \n' + '
  1. All the variables are locally\n' + 'scoped.
  2. \n' + '
  3. Un-intuitive as it is a curly\n' + 'braced language.
  4. \n' + '
  5. The lifecycle hook value_of is\n' + 'within a function.
  6. \n' + '
  7. Can only access top 16 slack slots.\n' + 'Including input and output.
  8. \n' + '
  9. We need to implement a graph\n' + 'coloring register allocator – to find out what the lifetime of the\n' + 'variables is.
  10. \n' + '
\n' + '
    \n' + '
  1. “This stack slot was used in the\n' + 'first half –– the second half you can use”
  2. \n' + '
  3. Or implement register\n' + 'splitting.
  4. \n' + '
\n' + '
    \n' + '
  1. Function inlining is frustrating\n' + 'sometimes:
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. SafeMath –– turns every\n' + 'operator into function call – which is a huge gas sink.
  2. \n' + '
\n' + '
    \n' + '
  1. How Solidity optimizes could be\n' + 'improved:
  2. \n' + '
\n' + '
    \n' + '
  1. It focuses on the code size (which\n' + 'makes sense since it’s minimizing the state tree); but sometimes\n' + 'you need to optimize size of tx gas (e.g. 0x needs optimized\n' + 'fillOrder call)
  2. \n' + '
\n' + '
    \n' + '
  1. ABI doesn’t implement\n' + 'introspection
  2. \n' + '
\n' + '
    \n' + '
  1. EIP 165
  2. \n' + '
\n' + '
    \n' + '
  1. E.g. “does this contract implement\n' + 'ERC20, or ERC223?”
  2. \n' + '
\n' + '
    \n' + '
  1. Solidity should have this\n' + 'in-built.
  2. \n' + '
\n' + '
    \n' + '
  1. Should be built into the API spec\n' + 'and compiler.
  2. \n' + '
\n' + '
    \n' + '
  1. Inheritance:
  2. \n' + '
\n' + '
    \n' + '
  1. Interface or abstract contract –\n' + 'e.g. Solidity automatically creates getters for state functions ––\n' + 'collides with
  2. \n' + '
  3. Contract which implements an\n' + 'interface – public or external for abstract functions – they\n' + 'collide
  4. \n' + '
\n' + '
    \n' + '
  1. ERCs – there is not a formal way to\n' + 'describe the interface for contracts.
  2. \n' + '
\n' + '
    \n' + '
  1. Have a standard repo –– this will\n' + 'lead to a canonical ABI definition –– can have semantic rules\n' + 'around this. Could run some specific unit tests against
  2. \n' + '
\n' + '
    \n' + '
  1. How do you handle\n' + 'testing?
  2. \n' + '
\n' + '
    \n' + '
  1. Testrpc has gotten better\n' + '––
  2. \n' + '
\n' + '
    \n' + '
  1. Increases the speed at which you\n' + 'can dev.
  2. \n' + '
\n' + '
    \n' + '
  1. Blockstream is really cool. Written\n' + 'by Mica (from Augur?), under the EthereumJS lib.
  2. \n' + '
  3. Good dealing with block re-orgs and\n' + 'changes in state.
  4. \n' + '
  5. Continuous Integration:
  6. \n' + '
\n' + '
    \n' + '
  1. Doesn’t really work for smart\n' + 'contracts.
  2. \n' + '
  3. We just use testrpc.
  4. \n' + '
  5. Neufund was different than\n' + '0x:
  6. \n' + '
\n' + '
    \n' + '
  1. Neufund was a trustee for tokens ––\n' + 'it was centralized by definition.
  2. \n' + '
  3. This made it simpler: I could\n' + 'create “open-ended” contracts –– a switch statement, that the\n' + 'default would send to another proxy contract.
  4. \n' + '
  5. But wouldn’t be able to do this\n' + 'with 0x –– e.g. if we wanted to add Shnorr signatures –– because\n' + 'it’s a governance / security issues.
  6. \n' + '
\n' + '
    \n' + '
  1. How do you handle smart contract\n' + 'verification and security?
  2. \n' + '
\n' + '
    \n' + '
  1. Code audits before\n' + 'deployment
  2. \n' + '
  3. Want to add a formal verification\n' + 'tool to our deployment tool.
  4. \n' + '
\n' + '
    \n' + '
  1. By analyzing the code, you can find\n' + 'patterns.
  2. \n' + '
\n' + '
    \n' + '
  1. I manually did an audit in v0 of\n' + '0x:
  2. \n' + '
\n' + '
    \n' + '
  1. Make sure all functions have a\n' + '“Read -> Write -> External Call” pattern, so you don’t have\n' + 'any race conditions.
  2. \n' + '
\n' + '
    \n' + '
  1. Other bounties?
  2. \n' + '
\n' + '
    \n' + '
  1. Rest of the bounties from\n' + 'Remco
  2. \n' + '
  3. State-watching –– built-in\n' + 'diff’ing of state trees
  4. \n' + '
\n' + '
    \n' + '
  1. Should be implemented in the\n' + 'Ethereum clients – Geth and Rust.
  2. \n' + '
  3. They want this feature for\n' + 'OrderWatcher.
  4. \n' + '
\n' + '
    \n' + '
  1. EIP process is\n' + 'suboptimal:
  2. \n' + '
\n' + '
    \n' + '
  1. Lacks in consensus-building.\n' + 'There’s vocal people who don’t have good ideas; there’s a lot of\n' + 'noise.
  2. \n' + '
  3. To improve: committee-based\n' + 'approach (reputable stakeholders from reputable projects who get\n' + 'together?).
  4. \n' + '
  5. Problems are getting solved at the\n' + 'wrong abstraction level.
  6. \n' + '
\n' + '
    \n' + '
  1. E.g. NFT standards.
  2. \n' + '
\n' + '
    \n' + '
  1. Neufund was largest Solidity\n' + 'project before –– tokenized equity.
  2. \n' + '
\n' + '
    \n' + '
  1. You want a EuroToken. You don’t\n' + 'want your company valuated in Ether.
  2. \n' + '
  3. What if blockchain forks; which\n' + 'token is actually tied to the company?
  4. \n' + '
\n' + '
    \n' + '
  1. Bounty approach gives many\n' + 'different styles within the codebase.
  2. \n' + '
\n' + '
    \n' + '
  1. This is a problem; e.g. OpenSSL\n' + 'codebase after Masters / PhDs.
  2. \n' + '
\n' + '

', }, ]; export default data;