最近看知乎,发现知乎上有些文章真的醍醐灌顶。印象比较深的是,文因互联ceo 鲍捷的一篇文章:最快的成长方式就是慢慢来。创业最关键的能力,就是“......做这些简单的事情,也可以让阿蒂斯区块链播种下优质的基因,最终长成参天大树,成为行业的翘楚。
最近看知乎,发现知乎上有些文章真的醍醐灌顶。印象比较深的是,文因互联ceo 鲍捷的一篇文章:最快的成长方式就是慢慢来。创业最关键的能力,就是“不被卡住”的能力。这才是“探索力”的根本,是创业“执行力”的核心。
很多人都熟悉让别人告知一个明确的目标,然后清晰的执行。但是,创业是一种探索,没有人会告诉你这样的明确的目标。探索,是一种反人性的活动。大多数人会对探索畏惧,恐惧,抵触,茫然。
“不被卡住”,需要掌握好“任务分解,快速迭代”的方法论,需要建立“交付”的态度(每个时期结束都有可交付的状态),需要“勤于沟通”, 需要”不固执己见“,更需要”不断复盘“。”不被卡住“,还有个要注意的是,有多少本钱打多少仗,不要总想着打大仗,要学会从小仗慢慢打。
在的基础上,实现了以太坊上与snark相关的智能合约和电路。本身也是应用很好的学习示例。
的源代码地址:
:///hr/.
本文中使用的源代码的最后一个如下:
a: w l &;[&#;]&;
d: f a::+
a f .
. 源代码结构
- 实现了的验证智能合约(v.),椭圆曲线的计算,mt以及mmc h计算的智能合约。这些智能合约可以通过进行部署测试。部署相关的脚本在目录下。
- 实现的相关功能,包括//等函数,验证,以及椭圆曲线的计算。
- 以上两个功能的测试代码,采用语言实现。
- 依赖库,包括,等等。
- 基于的库实现的更多的。本文着重介绍这些的实现。
. 实现
目录下的源代码结构如下:
. .
的库主要围绕(基于的函数)实现各种。在_这条椭圆曲线上实现了基于f的函数(,,等)。
的电路中各种定义都非常长。定义一个变量数组类型:__&;ft&;。
.精简了在_这条椭圆曲线相关的类型声明:
{
::&;::___&; lt;
::__g gt;
::__g gt;
::__ t;
::f&;t&; ft;
::f&;t&; ft;
::_&;ft&; ct;
::&;ft&; pt;
::_&;::ft&; vt;
::__&;ft&; vat;
::__&;ft&; lct;
::___&;ft&; lcat;
::_&;ft&; ltt;
::&;::ft&; gt;
::____&;t&; pt;
::_____&;t&; pkt;
::_____&;t&; vkt;
::_____&;t&; pit;
::_____&;t&; ait;
}
其中,ft特指在_线上的点的个数。
. .
实现了电路实现中常用的功能性函数。
vt _( pt &;_,:: &; )
{
vt ;
.(_, );
;
}
_创建一个vt。
vat (::&;vat&; &;_ )
{
_ _ = ;
(&;: _ )
_ += .();
vat ;
.(_);
_= ;
(&;: _ )
{
( _= ;&; .(); ++ )
{
[++]. = [].;
}
}
;
}
函数将多个vat合并成一个va。其实也很简单,就是把va中的都合并到一个va中。
. ___
在的__的基础上,稍做改动,让以太坊的预编译智能合约能验证的算法。___目录中的readme.很清晰的解释了改动的原因。
从以太坊的拜占庭硬分叉之后,以太坊引入了基于alt_bn的配对函数计算的预编译合约,合约实现的功能如下:
给定alt_bn上两个基点(g/g)一系列的点(, , , , ..., , ),预编译合约能检查:
(, ) * ... * (, ) 是否等于?
g原有的验证系数为:._,.以及.。g的验证等式为:
._ = (a, b) * (-, .) * (-c, .)
其中._为(, )。
如果直接用之前的验证等式,以太坊上的预编译合约没法实现。在不影响g的安全性的情况下,将g的验证系数变为:.,.,.以及.。g的验证等式也变为:
(a, b) * (-, .) * (-c, .) * (-, ) =
___目录就是实现如上的改动。同时提供了.,从文件中读取相应的验证参数进行验证。
.
算法的实现在/.文件中。
&; i,o,o=&;
p = p__t&;, , , , i, o, o&;;
p是p__t的一个实例。前面四个参数是算法的参数,后续会写文章详细介绍算法以及这些参数的含义(,,,是默认的配置)。i指定算法的输入的个数,o指定输出的个数,o指定是否对输出进行约束。
p__t的构造函数如下:
p__t(
pt &;,
vat&; _,
::&; _
) :
gt(, _),
(_),
(_&;_, _f, _p&;()),
_(, .c[], .m, _, fmt(_, ".[]")),
__(
_&;frt&;(
, _, ,
_., , _)),
_(
_&rt&;(
_, _, ,
__.()., , _)),
__(
_&;frt&;(
_, _-, ,
_.()., , _)),
_(, .c.(), .m, __.()., fmt(_, ".[%]", _-)),
__(o ? __(, o, ".") : vat())
{
}
算法的计算由好几轮组成:_(第一轮),__(预处理,完整轮),_(中间,不完整轮),__(后处理,完整轮)以及_(最后一轮)。
__是输出的变量。这些轮都是通过_函数实现。
&; t&;
::&;t&; _(
_,_,
pt&; ,
::&;::_&;ft&; &;&; ,
pc&; ,
::&; _)
{
::&;t&; ;
.(_ - _);
( = _;&; _; ++ )
{
&;= ( == _) ?: .().;
._(, .c[], .m, , fmt(_, ".[%]", ));
}
;
}
_就是为每一轮准备合适的参数。每一轮的具体实现通过p_r实现。
在p_r的封装下,p__t的__以及__相对简单,小伙伴们可以自行查看源代码。
. 示例代码
在的基础上,实现p函数的电路就非常简单了。构造一个简单的电路,给大家参考一下。
电路的需求:实现p计算,输入为两个ft,输出为一个ft。输出作为电路的 。
# "."
# "/."
;
{
th = p&;, &;;
_ :gt {
:
vt ;
vt ;
vt ;
th h;
_(
pt&; ,
::&;
) : gt(, ),
(_(, fmt(, "."))),
(_(, fmt(, "."))),
(_(, fmt(, "."))),
h(, __({, }), fmt(, "."))
{
}
__(
::ft _,
::ft _,
::ft _)
{
.() = _;
.() = _;
.() = _;
h.__();
}
__()
{
.__();
h.__();
.__(ct(, , h.()),
fmt(_, "== p( || )"));
}
};
};
总结:
在的基础上,实现了以太坊上与snark相关的智能合约和电路。本身也是应用很好的学习示例。的库主要围绕(基于的函数)实现各种。在_这条椭圆曲线上实现了基于f的函数(,,等)。