Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 29 Next »

Date

Attendees

Goals

MVP Feature Set

Nodes

  • Software installation (As a Node Operator, I want to install software from binary artifacts or a Docker image)

  • Software operation (As a Node Operator, I want to run software on Linux, MacOS, and in Docker)

  • Standalone mode (REPL and EVAL support) (As a dApp Developer, I want to interface with the Rholang interpreter and evaluate smart contracts independently from the blockchain)

  • Configuration (As a Node Operator, I want to have a default configuration and the ability to customize the configuration on the command line)

  • Monitoring (As a Node Operator, I want to monitor the performance, resource consumption, and status of my node)

  • Private key privacy (As a Node Operator, I do not want to expose my private wallet key on the command line)

Peer to Peer Network

  • Nodes connect to peers

    • As a Node operator, I want to be able to bootstrap to the network by connecting to any known node.

    • As a Node operator, once connected via a bootstrap node, I want to discover and connect to peers.

    • As a Node operator, I want to know how many peers I am connected to.

    • As a Node operator, I want to remember my peers so I can reconnect after a restart.

  • Nodes communicate via TLS (Transport Layer Security) for node discovery

  • Nodes communicate via Kademlia (secure or not?) for protocol handshake

  • Nodes broadcast messages

  • Nodes process blocks (needs clarification)

Proof of stake consensus

  • The platform uses a proof of stake consensus algorithm

Wallets

  • Create a wallet (As a user, I want to be able to create a wallet so that I can store tokens in it)

  • Add tokens to a wallet (As a user, I want to be able to add tokens to my wallet so that I have available tokens to pay for goods/services)

  • Remove tokens from a wallet (As a user, I want to be able to remove tokens from my wallet so that I can pay for goods/services)

  • Expose purses inside a wallet

  • Destroy a wallet (As a user, I want to be able to destroy my wallet when I am done using it, so that I don’t have an empty wallet I don’t need) - not immutable

Purses (already done)

  • Create purse (As a user, I want to be able to create a purse so that I can send tokens to another user)

  • Put tokens in a purse (As a user, I want to be able to put tokens in a purse so that I can send it to another user)

  • Send purse (As a user, I want to be able to send a purse to another user so that I can pay for goods/services rendered)

  • Receive purse (As a user, I want to be able to receive a purse from another user so that I can receive tokens for goods/services rendered)

  • Remove tokens from a purse (As a user, I want to be able to remove tokens from a purse to put in my wallet so that I can get paid for goods/services rendered)

  • Document Object Capabilities approach

  • Destroy purse (As a user, I want to be able to destroy a purse once it has finished the end to end transaction from one user to another, so that I don’t lose track of my empty purses)

Rent / Storage (Rent is a nice to have)

  • Store transaction data (As a user, I want to be able to store transaction data on the blockchain so that it is available and accessible to users)

  • Pay rent on transaction data (As a user, I want to pay rent for my transaction data so that it stays available and accessible to users) [Nice to Have]

  • Store non-transaction data (As a user, I want to be able to store non-transaction data on the blockchain so that it is available and accessible to users)

  • Pay rent on non-transaction data (As a user, I want to pay rent for my non-transaction data so that it stays available and accessible to users)

  • Delete transaction/non-transaction data (As a user, I want to be able to delete my data from the blockchain so that no user has access to it any more)

  • Copy data (As a user, I want to be able to copy my data from the blockchain so that I don’t have to pay rent for it any more)

  • Rent Due (As a user, I want to be able to determine when rent is due on my stored data)

  • Offchain Storage (As a user, I want to securely store my heterogenous data off chain)

  • Garbage Collection

Bonding/Unbonding

  • Bonding to the network (As a Node Validator, I want to be able to add my stake to the network and be recognized as a validator so I can participate in proof of stake consensus and be eligible to earn rewards (validating).)

  • Unbonding from the network (As a Node Validator, I want to be able to retrieve my stake from the network and no longer be recognized a as validator.)

Rewards

  • Earning rewards (As a Node Validator, I want to earn rewards by validating blocks on the network)

  • Getting paid rewards (As a Node Validator, I want to get paid the rewards I’ve earned so that I can use the tokens I’ve earned)

  • Retrieving rewards (As a Node Validator, I want the rewards I’ve earned to go into my wallet so that I can use the tokens I’ve earned)

Slashing

  • Slashing to the bone a staked validator (As a Node Validator, I want to be able to slash an operator who isn’t accurately validating, so that they are not able to continue false validations) - Cryptographic evidence of lying

  • Partial slash of stake from a staked validator on equivocation (As a System, I want to be able to remove the stake from a staked validator to prevent them from continuing validating)

  • Coop gets slash amount and held for a period of reconcilliation (TBD)

  • Validators are identifying the equivocation and evidence sent to the other validators

  • When the block is finalized (Casper consensus)

  • Unbond slashed validator from the network (As a System, I want to be able to remove/unbond a slashed validator from the network to prevent them from being on the network)

  • https://rchain.atlassian.net/wiki/spaces/CORE/pages/edit/412024951?draftId=413335578&draftShareId=d783d292-bd37-4b5d-b2e4-87ab1d4f9478&

Validating

  • Validating transactions (As a Node Validator, I want to be able to validate transactions so that I can earn rewards)

  • Software updates (As a Node Validator, I want to be able to update my RChain software without getting slashed)

  • Eject Validators who don’t keep up

  • Only a validator can propose

API (Joshy, Dan and others working on this and mostly done)

  • Deploy (external)

  • Propose (internal)

  • Fetch list of blocks

  • Metrics (CPU, Memory, etc)

Smart Contracts

  • Rholang is the smart contract language of the RChain platform

  • Rholang evaluation happens in the node via the Rholang interpreter

  • Syntax errors (As a dApp developer, I want an error message when there are syntax errors)

  • Deploying contracts (As a dApp Developer, I want to be able to propose a contract to the network so that dApp Users can use my smart contract)

  • Updating/replacing contracts (As a dApp Developer, I want to be able to update or replace a contract on the network so that dApp Users are using the most recent contract)

  • Deleting/removing contracts (As a dApp Developer, I want to be able to delete or otherwise remove a contract so that dApp users can no longer use to the contract)

  • Nested contracts (As a dApp Developer, I want a smart contract to be able to call another smart contract so that I can take advantage of another contract’s functionality)

  • Contract Definition inside another contract - WIDE (Persisting contracts) - Nice to have (done?)

  • K-framework - formal verification

Identity (RChain Europe?) (Application level, not platform)

  • Creating an identity (As a dApp user, I want to create an identity so that I can manage my wallet keys)

  • Recovering keys (As a user with a validated identity, I want to be able to use my identity so that I can recover my key)

  • Managing identity (As a user, I want to be able to manage who has access to my identity information so that I can keep my information private)

  • Trusting an identity (As a user, I want to be able to read and trust another user’s provided identity , so that I can engage in a transaction with them without requiring KYC first)

  • Node identity is separate from a validator’s and wallet owner’s identity.

  • Eventually that a coop member has an identity matched with a public key

Performance Reliability

  • Minimum threshold 10,000 (or ?) comm events / second (As a user, I want my transactions/comm events to go through within a maximum of X seconds so that I can process N number of transactions / second/minute) - How many shards to get here? - Atomic comm events, excluding joins.

  • Production Engineering Plan - What users can expect for performance - report from a single command to diagnose from debug report, including exact traces. Node logs and execution trace of Contracts.

  • As a validator, I need to be able to report the problem and include a minimum details log before the issue is acted on.

  • As a validator, I need to report a minimum detail log to trace transaction details on failures.

  • Identify when a Node starts to fail

Costs - Revisit

  • Comm Events: Maximum cost N REV/phlo (As a user, I want each comm event to cost a maximum of N REV, so that it is cost effective for me to transact business on the RChain blockchain)

  • Wallet2Wallet (or purse - how does this work?): Maximum cost N REV/phlo (As a user, I want each wallet transaction event to cost a maximum of N REV, so that it is cost effective for me to transact business on the RChain blockchain)

  • Storage costs: Maximum cost N REV per KB/MB? (As a user, I want to pay a maximum of N REV per KB/MB/? per month/year? for data stored on the blockchain)

  • Smart Contract execution (As a user, I want execution of a smart contract to cost a maximum of X, so that it is cost effective to deploy a contract on the network)

  • Nested Smart Contract execution (As a user, I want the calling contract to pay for the cost of the nested contract)

  • Ensuring that there is sufficient funds for calling contract (As a user, I want to make sure I have enough funds to cover the full cost of executing a smart contract and the nested contracts before beginning the transaction so that I can back out before committing the transaction)

  • https://rchain.atlassian.net/wiki/spaces/RHOL/pages/562036994/Cost+accounting+specification

  • https://rchain.atlassian.net/wiki/spaces/RHOL/pages/562200672/Cost+accounting+-+storage+issue

Economic security (Tied to Cost discussions)

  • Account for all computation on the blockchain (As a Node operator, I want to be compensated for storing, running, and processing transactions against smart contracts).

  • Execution costs correspond to computational intensity (As a Node operator, I want to be compensated more the computational intensity is greater for one contract than the another.)

  • Costs are consistent for a given contract (As a Node operator and dApp developer, I want the cost to execute a Rholang contract multiple times to be consistent.)

Obtaining data from the blockchain

  • Contract deployment (As a dApp developer, I get an answer back when the code is deployed if the code runs to completion, or an out of Phlo error)

  • Transaction receipt (As a dApp developer, when a deploy takes place with a name or set of names from my code api, I get to listen on the name for blocks.) - Is this enough? Discuss and use case when this wouldn’t be enough.

Name registry - Done

Namespaces (mentioned at 11/14 standup that this was not in mainnet)?

Minting - Done

  • TBD

Network launch

  • Validation of the genesis block (As an RChain stakeholder, I want a Coop-goverend and community-driven and independently verifiable validation of the genesis block to launch main net)

Issuance of REV

  • Creating REV tokens for network

  • Issue REV based on RHOC (As a RHOC holder, at the launch of main net I want to receive an equal amount of REV on the RChain blockchain based on the amount of RHOC held on Ethereum via a transparent and independently verifiable process.)

Documentation

  • As a Node operator, I want to know learn how to install, run, operate, and monitor my node.

  • As a Node validator, I want to know the minimum hardware and infrastructure requirements requirements, and how to participate as a validator.

  • As a dApp developer, I want to learn how to use and write smart contracts in Rholang.

  • As a dApp developer, I need to understand comm events and how to optimize them in my smart contracts

  • As a dApp developer, I need to know how to determine unforgeable names

  • As a dApp developer, I need to be able to get the UUID of the unforgeable names

  • A single source of indexed documentation.

  • Performance best practices.

Rholang

  • Feature complete?

Oracles ?

Shards

  • As a dApp developer, I want my dApp to run in it’s own shard

  • As a Validator, I want to create a staking pool and run a separate shard with it’s own token economics and performance profile

User Types

  • dApp Developers

  • dApp Users

  • Node Validators

  • RHOC Holders

  • REV Holders

  • System/Platform

Other Items needed for Launch

Who

Notes

Dependencies

Priority

Incentivized TestNet

Kenny and Medha were working on this

Casper implementation

Action items

Further Discussion Items

  • Arbitrary block sizes - Pawel, Sebatian, Kent and Greg

  • Limit on the number of comm events per FOR expression

  • Upper Bounds on match complexity and data size

  • How to count comm events when there is a join

  • Costs on matching, CPU usage, Storage and rent - Bind cpu costs and memory usage to contracts? Make it impossible to bring down server, stack overflow, consume all resources and memory

  • Storage

  • K of N contract - Completed?

  • Metrics

Decisions

  • No labels