Chainlink是区块链预言机的龙头,其下的chainlink-functions可以实现web2与web3的数据通讯。通过链上智能合约发送JS代码参数,可以请求web2的数据。详细介绍见chainlink-functions官方文档:https://docs.chain.link/chainlink-functions/getting-started
有了JS的加持,chainlink-functions可以认作为是EVM的扩展,EVM的L2。如消耗gas的复杂逻辑运算等均可以交给chainlink-functions进行处理,大大节省主链的gas。可以说chainlink-functions会有非常广的发展空间。
但是为了更安全运行,chainlink-functions对JS代码进行了限制. 虽然可以从外部引入包,如import npm 包等,但仍然有许多问题需要解决,主要如下:
- 很多功能函数需要根据项目的情况进行编写,项目要实现的功能越多,js代码的体积就越庞大,很有可能就超过了chainlink的代码体积的限制(30KB),导致功能受限
- 各项目的功能函数无法实现共享
- 代码需要作为合约参数进行输入,代码越大,花费的gas越多
- 外部包基本上通过web2的中心化服务器进行引入,去中心化程度低
因此,基于以上因素,本项目目标是建立一个类似于npm的web3标准库,通过去中心化存储的方式,让大家可以实现函数之间的共享调用,一方面可以大大减少了代码体积,另一方面,也提高了开发者的效率。此举也降低了入门门槛,使得新手也可以快速开发出高质量的产品。
本项目为开源项目,任何人都可以参与。前期侧重于函数开发标准化,较适合对JS和solidity较熟悉的人员。后面技术文档说明,前端页面,产品,运营等均可以参与。
本项目以JavaScript作为切入点,后期可以扩展到其他编程语言。
任何函数(不能引入外部包)均可以归入该标准库。标准库在链上是匿名的,任何人都可以发布。 关于标准库的名称,如下要求:
- 名称名称方式:name@version (例如[email protected])
- name: 只允许数字,大小写英文,及“-”
- version: 采用a.b.c的方式。其中当重大更新,且不兼容下游版本是升级a;当兼容下游版本,但有新功能是升级b;c为bug的修订升级版本
链上标准库采用EthStorage的去中心化存储技术进行存储。每个标准库第一次链上提交的人为owner,可以也只能对其进行升级操作,但旧版本无法删除及更新。非owner只能读取,没有操作的权限。
链下标准库由本repo记录。
链上和链下的标准库暂无关联。
任何函数(不能引入外部包)均可以,比如以下实现solidity上的功能函数等:
- abi.encodePacked()
- abi.encode()
- keccak256()-(by Kevin, on going)
- bytes => string
- string => bytes
- 各种类型的转换
- sign() and ecrecover()-(by Kevin, on going)
- encrypt() and decrypt()-(by Kevin, on going)
- 其他...
- 提交到本repo:我们鼓励大家在本目录位置提交PR, 包括原生代码,和使用说明readme。提交格式:以examole.js文件为例,详见example。
- 提交到链上:另见Web3Storage-EthStorage仓库详解,链上数据是否提交由开发者决定。
- 使用方法:以Chainlink为例,另见UseCases-Chainlink仓库详解。
我们秉持做开源免费的项目。当然,若有获得赞助,我们会根据大家的贡献发bounty。
Chainlink, EthStorage