Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 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.developer who creates a smart contract that I would like to call multiple times, I register it in the registry and I want get back a URI in the deploy response as the end of the registration process.

    • Today getting the URI requires scraping from the log or listening for it on name. Possible because gRPC was listening for the call. Originally intended for debugging.

    • I want to pay Bob. I know his public key, but I don’t have the URI of his wallet.

    • IDEA wallet URI is based on public key

    • As a wallet application I need a way to recover my lost wallet

      • Could be solved if I can predict an unforgeable name

  • As a dApp developer, I need to be able to predict the unforgeable name.

    • I want to deploy a contract and pay for it. To do that I need to create a signature over an unforgeable name.

      • Kyle says this is possible.

      • IDEA is the solution to be able to generate unforgeable names offline?

  • As a dApp developer, I need documentation for how unforgeable names are generated

    • Current documentation not enough

    • NEED Venus redesign the wallet

    • CONCERN man in the middle attack - create an unforgeable name/URI offline and then deploy contract and start interacting with it, how do I know someone isn’t changing the facts in the middle or that someone else isn't interacting with the contract

  • As a dApp developer, I want to get Ethereum-style events and get stdout back in grpc response so that

    • I want to record a log of my CryptoKitties given a range of blockheights.

    • I want to listen on name given a certain depth

    • I want to monitor a contract without operating a node or making a call to a node. I want to subscribe to events via a gRPC response.

      • NEED subscription feature

        • gRPC level subscribe feature is available, it needs to be implemented in RChain

        • IDEA to refactor existing listen for data on name to serve this purpose since it’s pretty close do delivering the functionality

    • Current architecture requires you to have nodes that look at the state (not validating nodes).

      • Read only nodes do this at no cost to watch. Cost is to operate the node.

    • IDEA some sort of channel where everything I send on the channel would return the results and deploy response. A function call.

  • As a dApp developer, I want to support binary files as part of deployments

    • CORE-1177

    • IDEA hex to bytes computation

      • CONCERN payment requirement for converting hex to bytes.

        • RSong does this

  • As a dApp developer, I need to enhance EVAL and rchain.cloud

    • Use case - we want to deploy a contract and get a return of the evaluation via 1 gRPC call

    • Needs

      • Storage content

      • STDOUT via gRPC call

        • STDOUT is for printing not a gRPC call

      • What the node evaluated (send back what was sent) - used for debugging

    • Discussion to confirm EVAL operates separately from Casper

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.

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

  • As a dApp developer, I need a reference for gRPC calls and a description of what they do

    • IDEA take .proto file and publish as HTML

      • CONCERN .proto file is not particularly readable. Publishing this for dApp developers with refinements would be helpful.

      • EXAMPLE listen for data response needs to be parsed, and it’s unclear how to parse based on available documentation

      • RECOMMENDATION collect a list of what people want to do, to inform the documentation created

      • MVP a list of available gRPC calls in HTML with examples

Rholang

  • Feature complete?

Oracles ?

...

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?

  • Metricsblock 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

  • Does end user need to enlist validator services?

    • Validators are incentivized to take deploys because deploys to collect transaction fees.

    • pokt.network is building some infrastructure around this.

  • How do you ask questions of the blockchain?

    • Listen for data at name

    • Spelunking through the blockchain

    • If you want to ask the current value of data in a wallet, how can you it if it requires Rholang?

Decisions