rholang 基础教程
nbking2005
发表于 2023-1-13 10:22:33
81
0
0
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。
然而它展示了一些基本的开发环境给你开始。
网上编译器7 p1 Q4 s' Q. ~7 [1 s! r- z$ Q
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。; |" i4 I4 Z! ^4 ?/ `% s
这个工具非常有前途,也是一种入门的简单方式。
但是它还是开发节点,有时候会不稳定。! `: |# A5 e ^ C" E5 [; e3 z
本地节点
真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。/ e& y& B9 W$ L! ]. h" {5 J( d+ R- N
首先你要为你自己的平台安装 RNode+ U) G' O* W$ m- {" p3 ]
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.2 w1 s& F1 ~3 ^* X/ F
一旦你的RNode安装好了,你可以运行基本的独立节点。
$ rnode run -s -n
在单独的终端里,你可以在REPL模式下一次执行一行rholang。; c- b0 V3 q. G8 x% I' m
$ rnode repl% j/ E- Z. `6 I7 a
╦═╗┌─┐┬ ┬┌─┐┬┌┐┌ ╔╗╔┌─┐┌┬┐┌─┐ ╦═╗╔═╗╔═╗╦ ) G4 y0 e0 c" B+ n3 S
╠╦╝│ ├─┤├─┤││││ ║║║│ │ ││├┤ ╠╦╝║╣ ╠═╝║
╩╚═└─┘┴ ┴┴ ┴┴┘└┘ ╝╚╝└─┘─┴┘└─┘ ╩╚═╚═╝╩ ╩═╝
rholang $ Nil* k" }2 B- l9 {( q
Deployment cost: CostAccount(0,Cost(0)) ~3 Z9 s2 q( T) i6 i. e( p% U
Storage Contents:, ?% d0 }% E. z# L& y* ~; }
for( x0, x1 ; \, Q5 u2 O5 U, i, ^
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
$ rnode eval intersection.rho/ j# }8 j- h- i" W% w
Evaluating from intersection.rho
Result for intersection.rho:3 I& V6 N0 \) W- P
Deployment cost: CostAccount(39,Cost(1132))
Storage Contents:
@{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1 0 d; d# r& w. \$ H* D5 ?9 H2 A. ]8 W
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。2 q5 z; F5 L4 R3 ^) a# P' G5 O
所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。& p) H1 N& Y4 y' C& o
Cryptofex IDE
一个叫做cryptofex 的开发环境已经进入了alpha版本。
Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。, r4 l0 q E, @- J1 j3 ]) W. R
Cryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。
IDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。* ?; r/ }: M# i5 P
发送与标准输出(stdout)
说声Hello2 ?6 O, L4 r3 [7 l: y
5 _4 k; P) |/ ]
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。
hello.rho9 a, |) C7 d. ^- g2 t$ l
练习
请让程序输出"Rholang rocks!" 而不是 “Hello World”。
练习+ x6 o+ m# B3 k( `& L4 _4 `! E
尝试将"stdout"替换为别的语句。会得到什么结果?0 [0 _' D4 Z- F) y
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。
+ D }- j; y+ A
标准输出(stdout)到底是什么东西6 v+ O7 @* z/ T( R
7 E- g$ u1 W1 K$ ]
rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。
stdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。
使用其他通道
实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。8 l( c( Z5 } }
tupleSpace.rho
那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。$ f8 @2 Y2 p: B; \) y8 S9 N
请确保你的信息保留在元组空间里。你应该会看到像下面的信息。% D& k& W3 A1 G
Storage Contents:
@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1, g/ Y* o) t3 i" i( A" [4 P0 {
同时做两件事
在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。; W. g' V: P5 T& }2 ~2 o' W
parallel.rho
| 的发音是 “parallel”, 可简称为 “par”。2 Q. n9 K4 d" o7 ?# }
练习
向"pizza shop"通道发送消息"1 large pepperoni please"。
练习
向"Mom’s Phone"通道发送"Hi Mom"。) I1 z6 H/ m) Q- v% o2 G
练习# v5 w7 w7 k8 U. m% U1 R
用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。3 k8 i) G3 V% J6 E! H6 B" a$ ~" \
小测试4 H( S* M* j3 i4 \, K
stdout!("Programming!") 将在屏幕上输出什么?, r+ l) x2 D& x4 j/ a7 H
d2 }; w ~# c4 V) s& @% F
Programming!
stdout!- |0 [+ `1 h8 T! w/ y! `
Nothing
@"what"!("Up") 在什么通道上发送消息?+ @1 h4 j! {" V
@"Up"
@"what". C3 A8 C5 g! {. _
what
rholang会先执行哪一条语句?/ q8 X+ n3 u2 X2 Z! X, V; n
@"stdout"!("Dogs")
|
@"stdout"!("Cats")
. u+ G5 Z( n$ k2 }0 w
输出 “Dogs”
输出 “Cats”
都不。 它们是并行的
+ h+ y J# x6 G
PS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?$ O: n* h* @$ ^9 T% T, B
有什么区别?
成为第一个吐槽的人