1 个不稳定版本
0.1.0 | 2023年11月30日 |
---|
#16 在 #mixer
49KB
1.5K SLoC
巴德克
Substrate 链部署和测试框架。
什么是巴德克?
巴德克基于 UniqueNetwork 的链ql Substrate 查询语言,提供链规范修改、密钥生成和链部署配置器。
混合
巴德克提供了一种有用的原语,用于以命令式方式应用复杂的对象转换:混合器。
巴德克中有两种混合器
bdk.混合器(mixin)(值)
mixin
可以有以下形式
null
:不需要转换,按原样继续object
:使用提供的对象继续,扩展自基本对象array
:将每个数组元素作为单独的混合器处理function
:从这里开始有趣的部分。此混合器将使用两个参数调用:prev
和final
,其中prev
是基本对象,而final
是应用了所有混合器的最终值。
简而言之,函数混合器将像 y-combinator 一样工作,其基本形式如下
[source,jsonnet]
local ycombinator(f) =
local v = f(v);
v;
ycombinator(function(final) {
a: 1,
// Works like `self.a`
b: final.a,
})
示例
[source,jsonnet]
local renameData(prev) =
prev {
_data::: prev.unconfortableDataFieldName,
unconfortableDataFieldName:: error 'was renamed to _data',
};
local renameDataBack(prev) =
prev {
unconfortableDataFieldName::: prev._data,
_data:: error 'was renamed back',
};
local addField(key, value) =
prev {_data+: {
[key]: value,
}};
local mixin = bdk.mixer([
renameData,
addField('b', 20),
addField('c', 30),
renameDataBack,
]);
std.assertEquals(mixin({
unconfortableDataFieldName: {
a: 10,
},
}), {
unconfortableDataFieldName: {
a: 10,
b: 20,
c: 30,
},
})
替代方案
筷子:模拟网络,而不是真正启动它。
僵尸网络:仅用于启动短暂的 Substrate 网络。
依赖关系
~80MB
~1.5M SLoC