#substrate #framework #local #key #chain #process #mixer

app baedeker

Substrate 网络编排框架

1 个不稳定版本

0.1.0 2023年11月30日

#16#mixer

MITGPL-3.0-or-later…

49KB
1.5K SLoC

巴德克

Substrate 链部署和测试框架。

什么是巴德克?

巴德克基于 UniqueNetwork 的链ql Substrate 查询语言,提供链规范修改、密钥生成和链部署配置器。

混合

巴德克提供了一种有用的原语,用于以命令式方式应用复杂的对象转换:混合器。

巴德克中有两种混合器

bdk.混合器(mixin)()

mixin 可以有以下形式

  • null:不需要转换,按原样继续
  • object:使用提供的对象继续,扩展自基本对象
  • array:将每个数组元素作为单独的混合器处理
  • function:从这里开始有趣的部分。此混合器将使用两个参数调用: prevfinal,其中 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