As a dApp Developer, I want to interface with the Rholang interpreter and evaluate smart contracts independently from the blockchain
- given that
rnodeis running - user executes all contracts from
/rholang/examples/*.rhousingrnode eval - program exists with 0 for each of the contract
- given that
rnodeis running - user executes all contracts from
/rholang/examples/*.rhousingrnode repl - program exists with 0 for each of the contract
- given that
rnodeis running - user executes rholang code that is "foo"
- program exists with 1 and prints out coop.rchain.rholang.interpreter.errorsTopLevelFreeVariablesNotAllowedError
As a Node Operator, I want to have a default configuration and the ability to customize the configuration on the command line
documentation: https://github.com/rchain/rchain/#configuration-file
documentation: https://github.com/rchain/rchain/#configuration-flags
documentation: https://github.com/rchain/rchain/#monitor-performance
- given that
standaloneis a running node in a standalone mode - start new node with
--bootstrappointing tostandalone - node should succesfully start and connect to
standalonevia protocol handshake
- start new node with
--bootstrappointing to some non-existing address - node should exit
- exit code should be 1
- node should log that bootstrap could not been found
- create a p2p network with 3 nodes
nodaA,nodeBandnodeC - join p2p network as described in "As a Node operator, I want to be able to bootstrap to the network by connecting to any known node" bootstaping from
nodeA - after a period of time new node discovers
nodeBandnodeC - after a period of time new node connects (via protocol handshake) with
nodeBandnodeC
- create a p2p network with 3 nodes
nodaA,nodeBandnodeC - access
nodeAhttp endpoint under/infoshould printconnected_peers = 2 - access
nodeAhttp endpoint under/peersto listnodeBandnodeCin JSON format
- create a p2p network with 3 nodes
nodaA,nodeBandnodeC - access
nodeAhttp endpoint under/infoshould printdiscovered_peers = 2 - access
nodeAhttp endpoint under/discovered-peersto listnodeBandnodeCin JSON format
As a platform stakeholder, I want a Coop-goverend, community-driven, and independently verifiable successful genesis ceremony
ceremonyMasteris instatantied with flags--required-signatures 2 --approve-duration 5min --approve-interval 10sec --bonds-file <holds two nodes validatorA and validatorB.validatorAandvalidatorBjoins p2p, both pointing toceremonyMasteras bootstrapreadOnlyA(read-only) joins p2pceremonyMastersendsUnapprovedBlocktovalidatorAandvalidatorBvalidatorAandvalidatorBreceivesUnapprovedBlockvalidatorAandvalidatorBsend backBlockApprovalceremonyMastertransitions toRunningonce requirements are met for duration and required sigsceremonyMastersendsApprovedBlocktovalidatorAandvalidatorBvalidatorAandvalidatorBtransition to RunningceremonyMaster,validatorAandvalidatorBtip points to block (genesis) where it has no parent and Bonds holdsvalidatorAandvalidatorBreadOnlyAtransitions toRunning
ceremonyMasteris instatantied with flags--required-signatures 3 --approve-duration 5min --approve-interval 10sec --bonds-file <holds two nodes validatorA and validatorB.validatorAandvalidatorBjoins p2p, both pointing toceremonyMasteras bootstrapceremonyMastersendsUnapprovedBlocktovalidatorAandvalidatorBvalidatorAandvalidatorBreceivesUnapprovedBlockvalidatorAandvalidatorBsend backBlockApprovalceremonyMasterlogs an error about not getting enough signatures on time (duration)
As a Node operator, I want to join the network after genesis ceremony, receive the genesis block, and know the state of the blockchain
- genesis reached as described in "A successful genesis ceremony"
validatorCjoins p2p, pointing onceremonyMasteras bootstrapvalidatorCsendsApprovedBlockRequesttoceremonyMasterceremonyMastersendsApprovedBlocktovalidatorCvalidatorCtransitions toRunningvalidatorCtip points to block (genesis) where it has no parent and Bonds holdsvalidatorAandvalidatorB
- instantiate p2p network with single
ceremonyMasterthat transitions toApprovedBlockReceivedhandler(--required-sig 0) - call
rnode deploywithrholang/examples/tut-philosophers.rhoonceremonyMaster - assert a success on std out
rnode deployexit code should be 0
- instantiate p2p network with single
ceremonyMasterthat transitions toApprovedBlockReceivedhandler(--required-sig 0) - call
rnode deploywith invalid contract onceremonyMaster - assert a error logs on std out
rnode deployexit code should be 1
- instantiate p2p network with single
ceremonyMasterthat transitions toApprovedBlockReceivedhandler(--required-sig 0) - call
rnode deploy&rnode proposewithintegration-tests/features/contracts/storage/store-data.rho (in system-integration repository)onceremonyMaster - assert success on std out
- call
rnode deploy&rnode proposewithintegration-tests/features/contracts/storage/read-data.rho (in system-integration repository)onceremonyMaster - assert success on std out
- compare data sent and restored
As a dApp developer, I want a contract to be able to call another contract so that I can take advantage of another contract's functionality
As a dApp developer, I want contract definition inside another contract (ex WIDE, persisting contracts).
As a REV holder, assuming I maintain control of my keys and properly use the wallet where I store REV, I expect my REV to never be lost
As a user, I want to be able to add REV to my coop-supplied wallet so that I have available REV to pay for goods/services
As a user, I want to be able to remove REV from my coop-supplied wallet so that I can pay for goods/services
As a user, I want to be able to receive REV from another user by providing that user with the public key for my coop-supplied-wallet.
As a user, I want to be able to send REV to the coop-supplied wallet of another user by specifying the public key to the coop-supplied wallet of that user.
As a user of a coop-supplied wallet, I want to query a wallet contract (or the blocks) for my public address to get the history of all REV transfers to and/or from it
As a recipient of REV (other than REV at mainnet launch 'genesis'), I can use a co-op supplied dApp to view my REV balance
As a recipient of REV at mainnet launch 'genesis', I can use a co-op supplied wallet to view my REV balance after launch.
As a validator, I can move Rev to/from the key-pair for one validator node to the key-pair for another validator node or that of the co-op supplied wallet dApp
As a wallet dApp developer, I want to use Ethereum-style addresses for send transactions to specify the recipient, so that a) I can reuse available Ethereum utility libraries; b) so the QR code is smaller and thus faster to scan than it would be for a full public key; c) it is easier for users to verbally confirm their address versus public key; and d) so RChain is more palatable for the Ethereum community
As a wallet dApp developer, I want to discover and connect to rNodes that support a particular version (release number and hash) and have a minimum number of active connections, so that user risks due to interoperability issues and sybil actors are minimized
As a RChain validator, I want my validator identity to be different from the identity of my node and from the identity of my wallet
documentation: https://github.com/rchain/rchain/#identities
As a RChain validator, I want to know when a block I propose is finalized and with what degree of confidence
- (this needs better set of steps, not relying on CliqueOracleTest)
- run p2p network
- duplicate steps in CliqueOracleTest to get get a DAG of known shape
- run show-block on each block and assert known fault tolerance
As a RChain validator, I want to expose to the internet only those methods needed for production dApps
documentation: https://github.com/rchain/rchain/#external-and-internal-api
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)
- TBD
As a RChain validator and as a platform stakeholder, I want to know that other validators who do not validate according to the slashing API will be slashed (removed as a validator and lose stake) in a process observable to other validators.
As a RChain validator, I want to know that if I am slashed then the Coop will hold my bond amount and not distribute it to other validators for a specified period of reconcilliation in the event that my slashing was unjustified.
As a platform stakeholder, I want to see the stake of a slashed validator distributed to other validators after the time specified for a hold for reconciliation.
As a platform stakeholder, I want to know that a validator that has been slashed is no longer able to validate.
As a RChain validator, I want to know that I will not be slashed and that I will be ejected if I meet the criteria as an underperforming validator and not the criteria for slashing.
As a Node Validator, who joins existing network, my node can catch up and finalize the same set of blocks that other nodes are finalizing
- initiate p2p with 3 validators
validatorA,validatorB,validatorC - each validator runs 100 rounds of deploy and propose
- wait graceful period of 30 seconds
- validator
validatorDjoins the network validatorAruns deploy and propose- wait graceful period of 30 seconds
- each validator should have a DAG with same set of finalized blocks
- initiate p2p with 3 validators
validatorA,validatorB,validatorC - each validator runs 10 rounds of deploy and propose
- wait graceful period of 30 seconds
- validator
validatorDjoins the network - wait graceful period of 10 seconds
- each validator should have a DAG with same set of finalized blocks
- initiate p2p with 5 validators
validatorA,validatorB,validatorC,validatorDandvalidatorE - each validator runs 100 rounds of deploy and propose
- wait graceful period of 30 seconds
- each validator should output exactly same DAG
As a validating node operator, I want to be compensated in REV for setting up, storing, running, and processing transactions. I need to be able to see a record of this compenstation and retrieve my earnings.
As a validating node operator, I want to receive interest in REV on my bond amount as defined by the schedule in the mint.
- initiate a validator
- Calculate interest for the validator's bond based on the scheudle in the mint
- transfer the earned interest to the validator's wallet
As a validator, I will yield 0.01% of all transaction fees received to accounts controlled by the Coop.
As the RChain coop, I want to receive 0.01% of all transaction fees to accounts controlled by the Coop.
As a user of the platform, I want to know the current performance of the network in terms of COMM events per second.
As the RChain coop, I need to verify how much total phlo over a period of time was paid out of a sending address.
As a any type of platform stakeholder, I want to know what I can expect for the performance and reliability of the RChain platform im the form of a production engineering plan.
As a validator, I want to learn the minimum hardware, infrastructure, and networking requirements to participate as a validator.
As a validator, I want to learn about the slashing API, the conditions and process for slashing, and the conditions and process for ejection.
As a dApp developer, I need to learn about COMM events (ex what are they? how are they measured? how are they part of the platform performance benchmark metric?) and how to optimize them in my smart contracts.
As a dApp developer, I need to learn how unforgeable names are generated, how to determine unforgeable names, and how to retrieve the UUID of the unforgeable names.
As a dApp developer, want to know how to calculate the costs for the execution of my contracts, including accounting for non-determinism.
As an Ehtereum developer familiar with the Infura API, I want to learn how to use the RChain platform.
- TBD
- TBD