弧度光谱qq
Radspec是Ethereum的动态表达式的安全解释器 纳特斯佩克。 。 。 .
这使得智能联系人开发者可以向终端用户显示改进过的函数文档,而无需 安全隐患. Radspec定义了自己的语法结构并剖析了自己的AST,而不是直接评价不信任的JavaScript.
特征
- 表达式:在智能合同最终用户进行交易时向其显示相关细节.
- 外部电话: Radspec可以查询其他合同.
- 保险: Radspec要求没有DOM访问或不信任的JavaScript评价.
- 兼容:大多数已存在的NatSpec动态表达式与Radspec兼容.
导 言( S)
Radspec支持任何合同编程语言,如Solity或Vyper,因为radspec在编译的JSON ABI上工作. 以下是使用"团结"的例子.
pragma solidity ^0.5.0;
contract Tree {
/// @notice Set the tree age to `numYears` years
function setAge(uint256 numYears) external {
// set the age into storage
}
}
注意到 动态表达式 联合国 setAge 函数。 在向最终用户介绍时,将根据用户提供的投入制作。 例如,如果最终用户使用10年的投入来调用合同,则用弧度表示如下:
将树龄设定为十年
使用 Solidity 编译器生成用户文档和 ABI:
solc --userdoc --abi tree.sol
由此产生产出:
{
"methods" :
{
"setAge(uint256)" :
{
"notice" : "Set the tree age to `numYears` years"
}
}
}
财务报告和审定财务报表
[{
"constant":false,
"inputs":[{"name":"numYears","type":"uint256"}],
"name":"setAge",
"outputs":[],
"payable":false,
"stateMutability":"nonpayable",
"type":"function"
}]
注意您也可以使用 人可引水之二。关于上述例子:
["function setAge(uint256 numYears) public view"]
使用弧度写一个简单的工具来解释此操作 :
import radspec from 'radspec'
// Set userDoc and ABI from above
const expression = userDoc.methods["setAge(uint256)"].notice
const call = {
abi: abi,
transaction: {
to: '0x8521742d3f456bd237e312d6e30724960f72517a',
data: '0xd5dcf127000000000000000000000000000000000000000000000000000000000000000a'
}
}
radspec.evaluate(expression, call)
.then(console.log) // => "Set the tree age to 10 years"
请告诉我们,如果还有什么你想要 拉德斯克能够评估 通过提交一个 问题来啊!
安装
只需使用您最喜欢的节点.js包管理器:
npm i radspec
文档
关于弧度和弧度内部的文献可以找到 这里。 。 。 .
捐款
传统发展
为什么Natspec.js不安全?
纳特斯克.js 接受任何有效的 JavaScript 。 这有多种原因
- 您需要自己写 JavaScript VM 或者使用
eval(不安全!)来自JavaScript内部 - 一个全能的语言,有类,功能,还有更多的功能,对于一个简单的DSL可以解决的东西来说,绝对是过度的.
随着Dapps越来越复杂,最重要的是工具的书写方式使得钓鱼几乎是不可能的. 评估 JavaScript 直接使您的 Dapp 打开到用户仅提交交易的跨站脚本攻击(!) .
许可证
麻省理工学院