Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
69 0 0
配置你的开发环境& f5 y# R8 l, q6 l
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。5 }1 n- Z, x6 D! [
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。
" B( [/ C3 E* A1 q" D' f然而它展示了一些基本的开发环境给你开始。
( l+ C9 D. Z9 L; A# Y. P% `* B网上编译器; d% A3 @! p: ^- k
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。% `" n# b# t' U4 A3 O( V# Y
这个工具非常有前途,也是一种入门的简单方式。
. ]9 f! w# G! {, \$ F5 B: I4 P但是它还是开发节点,有时候会不稳定。4 u9 U5 u" R: V
本地节点
! l0 F) a9 K2 E+ Z真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。6 p/ S, u  a% i# b8 N
首先你要为你自己的平台安装 RNode, E/ n' r5 _1 q9 b
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.# q( y) R* D9 ~/ I1 k! |
一旦你的RNode安装好了,你可以运行基本的独立节点。
) \- ^/ M4 c; w4 q( A5 B5 K) @* }/ S" Z6 z$ rnode run -s -n4 |- z0 h2 d, h
在单独的终端里,你可以在REPL模式下一次执行一行rholang。
* c/ b( h# _+ c! m* i$ rnode repl
$ P% m8 A3 i: ?+ K% x  c  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  4 h* P: I' T5 g. E& D$ }
  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  " P3 A# _+ a2 B0 J; t
  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝
, `9 `* O: z* h  R  B/ f" Nrholang $ Nil* i5 a- H1 P) |
Deployment cost: CostAccount(0,Cost(0))  z+ r9 j) v( Z
Storage Contents:
* M0 t( }% ]5 Q: ]+ j% J for( x0, x1 ! m8 G$ }* E7 Z- Y; _1 j( B
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
' V. P: ~; R& V; h: j% A$ rnode eval intersection.rho7 Z6 J1 j7 H. d* U
Evaluating from intersection.rho0 {# z( ]( `7 }1 ^" W! V: z8 q& N
Result for intersection.rho:4 ~% ~, ?7 q3 W4 c3 X; B/ V% x7 `. @
Deployment cost: CostAccount(39,Cost(1132))/ K* z& |/ ]/ \& [# s
Storage Contents:8 o+ E4 t) e  z+ Z/ H1 F: i
@{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1
; J$ C0 s$ m1 b2 g2 v有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。* J& x5 x8 P/ w3 x% K! ~8 Y
所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。
+ ]6 {0 v7 v, d3 u" y* k& \# fCryptofex IDE
7 |  z2 n+ g; L; n5 W一个叫做cryptofex 的开发环境已经进入了alpha版本。! I$ e5 A. g0 [/ S
Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。- p/ R0 e3 e) h( b1 q+ W
Cryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。
: H; X4 m% u  m9 N) p+ ], k* iIDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。
( i0 n' v: G. }* p! O/ U发送与标准输出(stdout)
/ H0 T2 T' c% _说声Hello
" F+ l+ x- @& @$ l1 H9 j: H4 ~, D! R; `' J4 h# K' S
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。
& p1 `2 G- I: c7 ?) Z+ u. d& Jhello.rho& j4 C- R+ f/ Z5 C" p# |
练习
& x. j( B" ]8 H! a2 o请让程序输出"Rholang rocks!" 而不是 “Hello World”。
: r1 o! }0 L; }1 x; g练习
$ n* Q. [; `# ~' E尝试将"stdout"替换为别的语句。会得到什么结果?
6 t$ u$ q5 b- e尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。3 x/ v% t, _, a6 [) v: l2 k
! l) v1 n4 ?0 P7 R8 E; c: x
标准输出(stdout)到底是什么东西
6 H6 Y# o& l; P8 T8 a) m
/ {: z2 F, y/ t, x# Wrho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。* T! _+ L+ A( P! N
' v' y* k4 }1 y- k
stdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。0 C) J! S, P  }" I) @7 u3 X
使用其他通道. _" F8 x% z5 y' O
/ V8 H& D5 w* Q# L8 g
实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。
9 w4 t! F# Q' v) U" I+ X- AtupleSpace.rho5 C/ P6 C/ C5 t: K( g' ]; j* ~& J
那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
$ C/ t4 p" w1 [0 H" I1 {9 T请确保你的信息保留在元组空间里。你应该会看到像下面的信息。
  r0 Q+ \7 E* t( d  ~* r* QStorage Contents:
8 R3 d% _! m: V; u$ |, |@{"RandoChannel"}!("This won't be on the screen") | for( x0, x13 g- W/ n) h+ _8 E
同时做两件事
( t2 i6 A$ H9 @  S5 C6 G1 v6 s
* i$ \. G' q* I6 L7 ]! J: k在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。4 v8 z+ ]: b7 F3 P
parallel.rho
0 L3 C8 ~% a) @| 的发音是 “parallel”, 可简称为 “par”。
# G4 B  u% t+ u, X: ~1 o练习$ r' Z/ e2 W* |3 u
向"pizza shop"通道发送消息"1 large pepperoni please"。7 ^. b% Q$ ^+ a+ y
练习
; l3 V$ _, l8 r" \# Z向"Mom’s Phone"通道发送"Hi Mom"。
# r1 P* K2 c& a% j练习# _( P: m+ T8 z4 a" n" b" ]
用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。' j9 E" y* J& j, x9 @, i3 A. `- c3 D
小测试
" O1 P3 p" |' ]# F- p- {  l& P! u5 D( Pstdout!("Programming!") 将在屏幕上输出什么?8 S+ ~' o* Y- f* q) S1 |" P0 z
6 \! T0 ^) Z2 t! X. r! z1 A
Programming!
: d4 }) M& _0 F9 {stdout!
) |* y8 u# n4 G, t- _Nothing
: w4 X# A( r$ v: \2 c2 [

4 A# M; o7 L2 J5 y@"what"!("Up") 在什么通道上发送消息?
, g; Q0 J& y) `8 z5 f5 ]/ a8 Y
6 R4 w2 F- J  x9 R( Y; c@"Up"  ]5 S9 ?  A4 c: i
@"what"
2 ], f1 O# |+ i. d& |' d# Y7 O& F1 jwhat
, f; N( `0 j# n+ T3 s
. u& Z/ O! o1 S8 g) i# f0 a" Z
rholang会先执行哪一条语句?- o% n" k2 R5 F& L- I' b
@"stdout"!("Dogs")) ~% F3 w. i+ S' S0 Q' B* D
|# B, B4 |: J3 N8 L  y4 P; [1 J& {
@"stdout"!("Cats")
0 w  ?9 C/ I/ _* p
/ q& v" X( {* y/ p/ {& m4 i2 y输出 “Dogs”$ v- Q1 t( K* P, ~0 ?
输出 “Cats”
* q, |# E- N+ G; z8 }# m  g9 b# M都不。 它们是并行的
' d  E) N' Z* P8 Y: m
% A: ^  R9 D& y
PS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?
, J; S8 M8 r$ g( V2 F有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1