Breakout session: cost model
April 2018 developer's conference
Questions addressed
|
Participants
- Joseph Denman (moderator)
- Nash Foster
- Kyle Butt
- Bill Willahan
- Jamie Cook
- Jake Gillberg
- Dan Connley
- Mirnal Manohar
- Kevin Valentine
- ?
- Eitan
- Kelly Foster (scribe)
Regions and impact on costing
If east costs more than central, and
If there are more validators in a region, then it would cost more to operate in that region
IS there a concept of the number (min and max) of the validators in a region?
How do you split out rewards to the validators?
PROPOSAL: Distribute rewards evenly (or even stake-weighted) to validators
- Problem: Free-riding:
CONCERN: What if a validator turns on and off every 45 seconds, and then they get rewards (free-riding)
- Free rider is a validator who watches the results of other validators and says they did it to get the reward
This problem is not unique to RChain. It is a problem that needs to be solved.
IDEA - TSA solution: To solve for an inattention problem, TSA inserts knives into bags that are not there.
- Insert a bogus transaction to force the network to ID, those who validate are free-riders
- IDEA - The abusive boyfriend protocol
- You know there are lies out there, if you sign something without checking it, then you are a free-rider
- This is part of the consensus protocol
- IDEA - Rewards are only distributed after the block is finalized. If you're block is not doing anything, then no rewards for you "Little Red Hen" concept
Ways to make REV
- Inflation
- Validation fees
How and when do fees change?
- Cost of storage
When is the measure of the namespace determined? How is it established?
- ANSWER: It is determined by the region (the sum of measure of the regions) determined by the genesis block.
- Regions establish the cost measures
- Why can't it be the namespace?
- Example: namespaces could come up with a costs model (A v B), but then C wants to join
- ANSWER: This is prohibitive because it would require storage at the top
- It is important that the measures of the regions don't change frequently because it will impact trust
- You want namespaces that are in a federated, competitive market
- You may decide to trade slowness for safety
- You may decide to trade fastness for insecurity
- What we want from the network is to have both extremes in the network
How is rent distributed?
- Costs increase as safety goes up
- Ideal is to find a place in the middle where the least achievable amount of safety is allowed.
What's the difference between a region and a namespace?
- Nothing
- A region is the smallest version of a namespace
- This makes top-level transactions very expensive
- It's cheaper to interact with your trusted network
- Introduces competition based on cost (market economics)
Should validators decide costs by region?
- Should there be a default for the region?
- Regions determine costs, not namespaces
Contract mobility and region fee-setting
- How do you move a contract from region 1 to region 2?
- What if a region becomes a cartel?
- Can validators in a region alter the price?
- There is a dis-incentive because no one will want to join
- But the ones stuck there will be held hostage
- The solution is that to become a validator you have to be approved at the top level.
- Local price information is published globally
- You need agreement globally to change the price regionally
- Are costs determined by humans?
- Humans establish the region and standards and push for global consensus
- Then the market can choose to participate in the region or not
- If a region can identify a region that is a cartel, you can set a standard not to process those transactions. You can set the stand
- How much would Target spend to underprice Walmart?
- You want everyone to lower the price as much as possible to encourage transaction volume (like multiple fast food locations at a single intersection)
If 2 '@foo' contracts are deployed simultaneously, how is it determined which contract points to which wallet
- ANSWER - When you deploy something there is a wallet in the same message, so you just pass the wallet
What happens when a contract runs out of Phlo?
- The block records what has happened so far and add a notice that it's out of phlo
- The network would store a record (a try) of contracts that ran out of phlo
- Hash the computation and store the effect as a record in a log of contracts that ran out of phlo
- Need to avoid replay attacks, where more than one person adds phlo to refuel the contract
OPTION A - Storage
- As time goes on the number of effects you have to keep track of more and more
- You do have to keep track of what has been revived - this is the tricker part, trickier than reviving
- What data structure would you use to track?
- A complete try leaves a hole, which results in rewriting the try
Option B - Running to quiescence
- Runs until there is nothing left to run
- Allows you to track when you're done
- It doesn't have to be sequential
- Kyle advocates to not run code that creates multiple races
- The network will decide who wins what race
- Could create slowness on the network
- If you don't want to slowness due to resourcing for race designs, then don't write code like that. Suggestion is to write it differently.
- Is it expensive and slow for the person writing it or for the validators?
- Could create slowness on the network
- The network will decide who wins what race
- If running to quiescence then, one validator decides the race
- Race winners are fair. They are just non-deterministic
- If you want fair, write better code
- Example: Network has 100 validators, you opt for validation from three.
- Transaction sent to 3 with a bunch of serial races, each validator calculates a trace and broadcasts to the network, the network decides the winner
- No single actor knows which one will be selected as the winner (it's safe and not fair)
- You deploy and pay for all computation until it reaches quiescence
- This disincentives others for writing on the platform (ex data feed will be expensive)
- Nash, don't do this because no one will write an oracle if this is the case (required to run to quiescence)
- Joe proposes deployer pays. If you invoke someone else's contract, you pay for it.
- This is Kyle's recommendation
Does phlo persist from block to block during a computation?
- Deploy (P) and Deploy (Q) exist and don't overlap overlap in the tuplespace.
- Henry needs to know this as it relates to storage
- We want to be able to persist code is such a way that when someone runs it you continue paying
- What happens when the cost of running a contract fluctuates?
- The phlo-balance-pointer solves for this
- Deployer pays until quiescence
- Mike wants I want to send data and not pay for it
- Think about each term of a contract being it's own tiny contract
- Would people have phlo wallets?
- No. You don't get phlo back if it runs to quiescence
- If there is any phlo let at the end of all your reductions, then you get change
- Incentivizes running the contract to completion
- Storage layer keeps a reference counter. If phlo not zero, then give change.
- If your code produces things in another namespace, your reference count remains 1 until you hear back from the other namespace that they've reached quiescense
- Your phlo number would have to be synced across namespaces if contract is run across namespaces
How does rent work?
- Example, chess clock. Timed when contract is in the tuplespace, timed when contract is being executed. Rent is being charged when you're not running