同步操作将从 anycmd/tlang 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
一个类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比对的话就能取走被这个合约锁定的资产了。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。