码云推荐 | 可实现智能合约的类 Lisp 语言 tlang

栏目: Lisp · 发布时间: 7年前

内容简介:一个类lisp语言我准备去除区块链的虚拟机,因为虚拟机不是必要的,改以解释执行类list语言的形式表达智能合约,然后提供标准交易模板,普通交易使用交易模板进行,有复杂逻辑的交易由应用者使用tlang语言书写逻辑表达(也可以使用面向java、.net、js、go等语言的sdk书写,使用sdk书写的程序会自动翻译为tlang)。这个合约的逻辑是:要么知道我的birthDay是2017-06-23 要么 给出pubKey和用对应的私钥对你的pubKeyHash的签名。

tlang

一个类lisp语言

我准备去除区块链的虚拟机,因为虚拟机不是必要的,改以解释执行类list语言的形式表达智能合约,然后提供标准交易模板,普通交易使用交易模板进行,有复杂逻辑的交易由应用者使用tlang语言书写逻辑表达(也可以使用面向 java 、.net、js、 go 等语言的sdk书写,使用sdk书写的程序会自动翻译为tlang)。

案例

下面是用tlang书写的一段合约逻辑

这个合约的逻辑是:要么知道我的birthDay是2017-06-23 要么 给出pubKey和用对应的私钥对你的pubKeyHash的签名。

由合约调用者传入的三个参数赋值下面三个变量。

合约定义方定义逻辑,合约调用方定义数据。

合约调用方提供数据:

(define birthDay "{birthDay}")
(define pubKey "{pubKey}")
(define sign "{sign}")

上面的键值对来自合约调用者,数据是键值对,执行时直接把键值对加入作用域不需要拼代码从而没有注入代码的可能。

下面三行是智能合约的逻辑,这三行是死的不会被调用者注入代码。

合约定义方定义的逻辑:

(define pubKeyHash="8658cefd0c1cf0ff294d14a66278f5a5490a1f8e")
(define myBirthDayHash="d4a0f6c5b4bcbf2f5830eabed3daa7304fb794d6")
(or 
	(= (hash160 birthDay) myBirthDayHash) 
	(and 
		(= (hash160 pubKey) pubKeyHash) 
		(= (decrypt pubKey sign) pubKeyHash)))

and = hash160 or decrypt是系统函数。

如果提供checksig系统函数的话(= (decrypt pubKey sign) pubKeyHash)也可以是(checksig pubKey sign pubKeyHash)。

ps:话说,这个案例不好,因为生日可以被枚举出来,从今天往前推100年挨着计算每一天的hash然后跟myBirthDayHash比对的话就能取走被这个合约锁定的资产了。


以上所述就是小编给大家介绍的《码云推荐 | 可实现智能合约的类 Lisp 语言 tlang》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解计算机系统(原书第2版)

深入理解计算机系统(原书第2版)

(美)Randal E.Bryant、David O'Hallaron / 龚奕利、雷迎春 / 机械工业出版社 / 2011-1-1 / 99.00元

本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性。全书共12章,主要内容包括信息的表示和处理、程序的机器级表示、处理器体系结构、优化程序性能、存储器层次结构、链接、异常控制流、虚拟存储器、系统级I/O、网络编程、并发编程等。书中提供大量的例子和练习,并给出部分答案,有助于读者加深对正文所述概念和知识的理解。 本书的最大优点是为程序......一起来看看 《深入理解计算机系统(原书第2版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具