Skip to content

Instantly share code, notes, and snippets.

@hilltracer
Created May 31, 2021 19:44
Show Gist options
  • Save hilltracer/195c4e7186e4889b5e6c9ef6561e7bb1 to your computer and use it in GitHub Desktop.
Save hilltracer/195c4e7186e4889b5e6c9ef6561e7bb1 to your computer and use it in GitHub Desktop.
package coop.rchain.models_no_proto
import coop.rchain.models.BitSetBytesMapper.bitSetBytesMapper
/** *
* Rholang process
*
* For example, `@0!(1) | @2!(3) | for(x <- @0) { Nil }` has two sends
* and one receive.
*
* The Nil process is a `Par` with no sends, receives, etc.
*
* @param unforgeables
* unforgeable names
*/
final case class Par(
sends: Seq[Send] = Seq.empty,
receives: Seq[Receive] = Seq.empty,
news: Seq[New] = Seq.empty,
exprs: Seq[Expr] = Seq.empty,
matches: Seq[Match] = Seq.empty,
unforgeables: Seq[GUnforgeable] = Seq.empty,
bundles: Seq[Bundle] = Seq.empty,
connectives: Seq[Connective] = Seq.empty,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree
.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false
)
object Par {
lazy val defaultInstance = Par(
sends = Seq.empty,
receives = Seq.empty,
news = Seq.empty,
exprs = Seq.empty,
matches = Seq.empty,
unforgeables = Seq.empty,
bundles = Seq.empty,
connectives = Seq.empty,
locallyFree =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed = false
)
}
/** *
* Either rholang code or code built in to the interpreter.
*/
final case class TaggedContinuation(
taggedCont: coop.rchain.models.TaggedContinuation.TaggedCont =
coop.rchain.models.TaggedContinuation.TaggedCont.Empty
)
/** *
* Rholang code along with the state of a split random number
* generator for generating new unforgeable names.
*/
final case class ParWithRandom(
body: Par = Par.defaultInstance,
randomState: coop.rchain.crypto.hash.Blake2b512Random =
RhoTypes_val._typemapper_randomState.toCustom(_root_.com.google.protobuf.ByteString.EMPTY)
)
/** *
* Cost of the performed operations.
*/
final case class PCost(
cost: Long = 0L
)
final case class ListParWithRandom(
pars: Seq[Par] = Seq.empty,
randomState: coop.rchain.crypto.hash.Blake2b512Random = RhoTypes_val._typemapper_randomState
.toCustom(_root_.com.google.protobuf.ByteString.EMPTY)
)
/** While we use vars in both positions, when producing the normalized
* representation we need a discipline to track whether a var is a name or a
* process.
* These are DeBruijn levels
*/
final case class Var(
varInstance: coop.rchain.models.Var.VarInstance = coop.rchain.models.Var.VarInstance.Empty
)
object Var {
lazy val defaultInstance = Var(
varInstance = coop.rchain.models.Var.VarInstance.Empty
)
}
/** *
* Nothing can be received from a (quoted) bundle with `readFlag = false`.
* Likeise nothing can be sent to a (quoted) bundle with `writeFlag = false`.
*
* If both flags are set to false, bundle allows only for equivalance check.
*
* @param writeFlag
* flag indicating whether bundle is writeable
* @param readFlag
* flag indicating whether bundle is readable
*/
final case class Bundle(
body: Par = Par.defaultInstance,
writeFlag: Boolean = false,
readFlag: Boolean = false
)
/** *
* A send is written `chan!(data)` or `chan!!(data)` for a persistent send.
*
* Upon send, all free variables in data are substituted with their values.
*/
final case class Send(
chan: Par = Par.defaultInstance,
data: Seq[Par] = Seq.empty,
persistent: Boolean = false,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false
)
final case class ReceiveBind(
patterns: Seq[Par] = Seq.empty,
source: Par = Par.defaultInstance,
remainder: Option[Var] = None,
freeCount: Int = 0
)
final case class ListBindPatterns(
patterns: Seq[BindPattern] = Seq.empty
)
final case class BindPattern(
patterns: Seq[Par] = Seq.empty,
remainder: Option[Var] = None,
freeCount: Int = 0
)
/** *
* A receive is written `for(binds) { body }`
* i.e. `for(patterns <- source) { body }`
* or for a persistent recieve: `for(patterns <= source) { body }`.
*
* It's an error for free Variable to occur more than once in a pattern.
*/
final case class Receive(
binds: Seq[ReceiveBind] = Seq.empty,
body: Par = Par.defaultInstance,
persistent: Boolean = false,
peek: Boolean = false,
bindCount: Int = 0,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false
)
/** Number of variables bound in the new statement.
* For normalized form, p should not contain solely another new.
* Also for normalized form, the first use should be level+0, next use level+1
* up to level+count for the last used variable.
*
* @param bindCount
* Includes any uris listed below. This makes it easier to substitute or walk a term.
* @param uri
* For normalization, uri-referenced variables come at the end, and in lexicographical order.
*/
final case class New(
bindCount: Int = 0,
p: Par = Par.defaultInstance,
uri: Seq[String] = Seq.empty,
injections: Map[String, Par] = Map.empty,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY)
)
final case class MatchCase(
pattern: Par = Par.defaultInstance,
source: Par = Par.defaultInstance,
freeCount: Int = 0
)
final case class Match(
target: Par = Par.defaultInstance,
cases: Seq[MatchCase] = Seq.empty,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false
)
/** Any process may be an operand to an expression.
* Only processes equivalent to a ground process of compatible type will reduce.
*/
final case class Expr(
exprInstance: coop.rchain.models.Expr.ExprInstance = coop.rchain.models.Expr.ExprInstance.Empty
)
object Expr {
sealed trait ExprInstance extends _root_.scalapb.GeneratedOneof {
def gBool: Option[Boolean] = None
def gInt: Option[Long] = None
def gString: Option[String] = None
def gUri: Option[String] = None
def gByteArray: Option[_root_.com.google.protobuf.ByteString] = None
def eNotBody: Option[ENot] = None
def eNegBody: Option[ENeg] = None
def eMultBody: Option[EMult] = None
def eDivBody: Option[EDiv] = None
def ePlusBody: Option[EPlus] = None
def eMinusBody: Option[EMinus] = None
def eLtBody: Option[ELt] = None
def eLteBody: Option[ELte] = None
def eGtBody: Option[EGt] = None
def eGteBody: Option[EGte] = None
def eEqBody: Option[EEq] = None
def eNeqBody: Option[ENeq] = None
def eAndBody: Option[EAnd] = None
def eOrBody: Option[EOr] = None
def eVarBody: Option[EVar] = None
def eListBody: Option[EList] = None
def eTupleBody: Option[ETuple] = None
def eSetBody: Option[coop.rchain.models.ParSet] = None
def eMapBody: Option[coop.rchain.models.ParMap] = None
def eMethodBody: Option[EMethod] = None
def eMatchesBody: Option[EMatches] = None
def ePercentPercentBody: Option[EPercentPercent] = None
def ePlusPlusBody: Option[EPlusPlus] = None
def eMinusMinusBody: Option[EMinusMinus] = None
def eModBody: Option[EMod] = None
}
object ExprInstance {
case object Empty
final case class GBool(value: Boolean)
final case class GInt(value: Long)
final case class GString(value: String)
final case class GUri(value: String)
final case class GByteArray(value: _root_.com.google.protobuf.ByteString)
final case class ENotBody(value: ENot)
final case class ENegBody(value: ENeg)
final case class EMultBody(value: EMult)
final case class EDivBody(value: EDiv)
final case class EPlusBody(value: EPlus)
final case class EMinusBody(value: EMinus)
final case class ELtBody(value: ELt)
final case class ELteBody(value: ELte)
final case class EGtBody(value: EGt)
final case class EGteBody(value: EGte)
final case class EEqBody(value: EEq)
final case class ENeqBody(value: ENeq)
final case class EAndBody(value: EAnd)
final case class EOrBody(value: EOr)
final case class EVarBody(value: EVar)
final case class EListBody(value: EList)
final case class ETupleBody(value: ETuple)
final case class ESetBody(value: coop.rchain.models.ParSet)
final case class EMapBody(value: coop.rchain.models.ParMap)
final case class EMethodBody(value: EMethod)
final case class EMatchesBody(value: EMatches)
final case class EPercentPercentBody(value: EPercentPercent)
final case class EPlusPlusBody(value: EPlusPlus)
final case class EMinusMinusBody(value: EMinusMinus)
final case class EModBody(value: EMod)
}
}
final case class EList(
ps: Seq[Par] = Seq.empty,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false,
remainder: Option[Var] = None
)
final case class ETuple(
ps: Seq[Par] = Seq.empty,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false
)
final case class ESet(
ps: Seq[Par] = Seq.empty,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false,
remainder: Option[Var] = None
)
final case class EMap(
kvs: Seq[KeyValuePair] = Seq.empty,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false,
remainder: Option[Var] = None
)
/** *
* `target.method(arguments)`
*/
final case class EMethod(
methodName: String = "",
target: Par = Par.defaultInstance,
arguments: Seq[Par] = Seq.empty,
locallyFree: coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet] =
RhoTypes_val._typemapper_locallyFree.toCustom(_root_.com.google.protobuf.ByteString.EMPTY),
connectiveUsed: Boolean = false
)
final case class KeyValuePair(
key: Par = Par.defaultInstance,
value: Par = Par.defaultInstance
)
/** A variable used as a var should be bound in a process context, not a name
* context. For example:
* `for (@x <- c1; @y <- c2) { z!(x + y) }` is fine, but
* `for (x <- c1; y <- c2) { z!(x + y) }` should raise an error.
*/
final case class EVar(
v: Var = Var.defaultInstance
)
final case class ENot(
p: Par = Par.defaultInstance
)
final case class ENeg(
p: Par = Par.defaultInstance
)
final case class EMult(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EDiv(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EMod(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EPlus(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EMinus(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class ELt(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class ELte(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EGt(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EGte(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EEq(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class ENeq(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EAnd(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EOr(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class EMatches(
target: Par = Par.defaultInstance,
pattern: Par = Par.defaultInstance
)
/** *
* String interpolation
*
* `"Hello, {name}" %% {"name": "Bob"}` denotes `"Hello, Bob"`
*/
final case class EPercentPercent(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
/** Concatenation
*/
final case class EPlusPlus(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
/** Set difference
*/
final case class EMinusMinus(
p1: Par = Par.defaultInstance,
p2: Par = Par.defaultInstance
)
final case class Connective(
connectiveInstance: Connective.ConnectiveInstance = Connective.ConnectiveInstance.Empty
)
object Connective {
sealed trait ConnectiveInstance {
def connAndBody: Option[ConnectiveBody] = None
def connOrBody: Option[ConnectiveBody] = None
def connNotBody: Option[Par] = None
def varRefBody: Option[VarRef] = None
def connBool: Option[Boolean] = None
def connInt: Option[Boolean] = None
def connString: Option[Boolean] = None
def connUri: Option[Boolean] = None
def connByteArray: Option[Boolean] = None
}
object ConnectiveInstance {
case object Empty extends ConnectiveInstance
final case class ConnAndBody(value: ConnectiveBody) extends ConnectiveInstance
final case class ConnOrBody(value: ConnectiveBody) extends ConnectiveInstance
final case class ConnNotBody(value: Par) extends ConnectiveInstance
final case class VarRefBody(value: VarRef) extends ConnectiveInstance
final case class ConnBool(value: Boolean) extends ConnectiveInstance
final case class ConnInt(value: Boolean) extends ConnectiveInstance
final case class ConnString(value: Boolean) extends ConnectiveInstance
final case class ConnUri(value: Boolean) extends ConnectiveInstance
final case class ConnByteArray(value: Boolean) extends ConnectiveInstance
}
}
final case class VarRef(
index: Int = 0,
depth: Int = 0
)
final case class ConnectiveBody(
ps: Seq[Par] = Seq.empty
)
final case class DeployId(
sig: _root_.com.google.protobuf.ByteString = _root_.com.google.protobuf.ByteString.EMPTY
)
final case class DeployerId(
publicKey: _root_.com.google.protobuf.ByteString = _root_.com.google.protobuf.ByteString.EMPTY
)
final case class GUnforgeable(
unfInstance: coop.rchain.models.GUnforgeable.UnfInstance =
coop.rchain.models.GUnforgeable.UnfInstance.Empty
)
object GUnforgeable {
sealed trait UnfInstance {
def gPrivateBody: Option[GPrivate] = None
def gDeployIdBody: Option[GDeployId] = None
def gDeployerIdBody: Option[GDeployerId] = None
def gSysAuthTokenBody: Option[GSysAuthToken] = None
}
object UnfInstance {
case object Empty extends UnfInstance
final case class GPrivateBody(value: GPrivate) extends UnfInstance
final case class GDeployIdBody(value: GDeployId) extends UnfInstance
final case class GDeployerIdBody(value: GDeployerId) extends UnfInstance
final case class GSysAuthTokenBody(value: GSysAuthToken) extends UnfInstance
}
}
final case class GPrivate(
id: _root_.com.google.protobuf.ByteString = _root_.com.google.protobuf.ByteString.EMPTY
)
final case class GDeployId(
sig: _root_.com.google.protobuf.ByteString = _root_.com.google.protobuf.ByteString.EMPTY
)
final case class GDeployerId(
publicKey: _root_.com.google.protobuf.ByteString = _root_.com.google.protobuf.ByteString.EMPTY
)
final case class GSysAuthToken()
object RhoTypes_val {
val _typemapper_locallyFree: _root_.scalapb.TypeMapper[
_root_.com.google.protobuf.ByteString,
coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet]
] = implicitly[_root_.scalapb.TypeMapper[
_root_.com.google.protobuf.ByteString,
coop.rchain.models.AlwaysEqual[scala.collection.immutable.BitSet]
]]
val _typemapper_randomState: _root_.scalapb.TypeMapper[
_root_.com.google.protobuf.ByteString,
coop.rchain.crypto.hash.Blake2b512Random
] = implicitly[_root_.scalapb.TypeMapper[
_root_.com.google.protobuf.ByteString,
coop.rchain.crypto.hash.Blake2b512Random
]]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment