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