Rholang语法

因为最近一门课大作业与RChain项目有关,不得不临时学习Rholang,以下为个人根据知乎和其他博客关于Rholang的语法小结,可能存在问题,请各位指正

rholang语法:

rholang中基本元素:name与process

name和process可以相互转化,二者关系可以用 c中的指针进行理解,如*p=q,name相当于p这个指针,没有具体内容,process相当于q,有具体内容,name与process也可以进行相似的转化,*name=process,@process=name。

便于了解rholang信息接收机制可将name看为信箱,process看为信件

发送信息基本格式

name ! (process) 表示向name这个信箱发送一个process信件

Myname!(“helloworld”)表示向myname发送”helloworld”

@”stdout”!(“helloworld”)表示向@”stdout”这个name,发送”helloworld”,即向标准输出中写入helloworld

接收信息基本格式

for (name1<-name2){...}

具体含义为从name2中取出一个process,并将它用@process=name1的方式进行替换,{...}中的内容为接收信息后相关操作,最简单操作为Nil,即什么都不做。

声明一个name

new Myname in{...},{}中为接收或发送操作,例如:

new Myname in{

for (v-<Myname)

{Nil}|

Myname !(“Helloworld”)

}

由于rholang中除数据依赖时不存在顺序执行,多个操作用|连接。

以上为rholang基本语法,可以用下列总结:

P,Q,R::=0

X,ptrn::=@P

for (prtn1<-x1,prtn2<-x2...)

P

P|Q

X!(Q)

*x

name信箱注意事项

name取process顺序不保证与存入顺序一致

当for(x<-prtn)P时表示取件后执行P,如果信箱为空,则将P放入信箱,并称其为continuation

当信箱中存有continuation时接收process Q,则不将Q放入信箱,将Q与continuation匹配后执行

合约

用<-接收消息后操作只会执行一次,而用<=接收消息每次都会执行

可将<-看作预设一次操作,而<=为信箱的性质

new Myname in{

for (x<-Myname)

{

@”stdout”!(*x)

}|

Myname!(“Hi”)|

Myname!(“Hello”)

}

如果用<-只会输出Hi或Hello,而用<=则都会

同时<=等价与contract Myname(x)={@”stdout”!(*x)}

以下为对RChain项目要的部分了解

多个name构成元组空间,一堆服务器维护一个元组空间,这堆服务器叫名字空间

RChain中货币的流通树形方案

存在根名字空间,其他空间创建时必须有父名字空间,purse只能在名字空间中移动,父子空间的货币兑换通过系列合约进行,父名字空间有记录子空间金额总数的参数

父向子空间转账时,转账钱包先分离金额,金额经过兑换后删除,同时在子空间生成相对应兑换金额,父空间记录金额参数随之改变,接收者融合兑换后金额完成转账

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值