/
Rholang Lab #1 Notes:
Rholang Lab #1 Notes:
The main theme was a gradual progression from cell to account.
contract Cell(get, set, state) { select { case ret <- get; val <- state { ret!(val) | state!(val) | cell(get, set, state) } case newval <- set, _ <- state { state!(newval) | cell(get, set, state) } } }
// Note that for the general case, we could use function discipline to apply any transformation to mod, but for this purpose, simple inc/dec is fine. contract ModCell(get, mod, state) { select { case ret <- get; val <- state { ret!(val) | state!(val) | cell(get, mod, state) } case delta <- mod, val <- state { state!(val + delta) | cell(get, mod, state) } } }
contract Balance(get, mod, state) { select { case ret <- get; val <- state { ret!(val) | state!(val) | cell(get, mod, state) } case (delta, ack) <- mod, val <- state { // We probably should have if/else sugar that desugars to case on a bool. if (val + delta) >= 0 { state!(val + delta) | ack!(true) | cell(get, mod, state) } else { state!(val) | ack!(false) | cell(get, mod, state) } } } }
contract Account(get, mod, xfer, state) { select { case ret <- get; val <- state { ret!(val) | state!(val) | cell(get, mod, xfer, state) } case (delta, ack) <- mod, val <- state { // We probably should have if/else sugar that desugars to case on a bool. if (val + delta) >= 0 { state!(val + delta) | ack!(true) | cell(get, mod, xfer, state) } else { state!(val) | ack!(false) | cell(get, mod, xfer, state) } } // This could more directly use the state name of the src Account. case (delta, srcmod, ack) <- xfer; val <- state { if (val + delta) < 0 { state!(val) | ack!(false) | cell(get, mod, xfer, state) } else { new ret in { srcmod!(-delta, ret) select { case true <- ret { state!(val + delta) | ack!(true) | cell(get, mod, xfer, state) } case false <- ret { state(!val) | ack(!false) | cell(get, mod, xfer, state) } } } // end new } // end else } // end xfer case } // end select } // end contract
Related content
Pre and Post conditions in Rholang as transaction and payment boundaries
Pre and Post conditions in Rholang as transaction and payment boundaries
More like this
Resource Types
Resource Types
More like this
Total functional sublanguage typesystem
Total functional sublanguage typesystem
More like this
Draft of Rholang Wallet code
Draft of Rholang Wallet code
More like this
Syntactic sugaring proposals for Rholang
Syntactic sugaring proposals for Rholang
More like this
Partial Balance Transaction
Partial Balance Transaction
More like this