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 31 Current »

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)

  • As a dApp user, I want to know how many comm events per second to expect.
    Function to determine how many comm events per second based on average size of comm events per domain. For transactions, it’s based on a single number. Wallets would be used for financial transactions. Note that for joins, the number will be less than max since they generate multple comm events.

  • As a dApp developer, I want to know the maximum size of data I can send per comm event since if I send too much and the comm event fails I will loss the phlo I sent.

  • 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