From 7f428c48e2d7962ffa431a75d47cada940f26102 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 18 Aug 2022 18:24:30 +0000 Subject: [PATCH] ci: give money to alice on fork --- --- a/.docker/forkless-config/fork.jsonnet +++ b/.docker/forkless-config/fork.jsonnet @@ -8,6 +8,8 @@ if sourceRaw[key] != null }; +local typeNames = (import './typeNames.jsonnet')(sourceChain); + local auraKeys = [ // AuraExt.Authorities, we don't have aura pallet enabled for some reason, to refer using cql api @@ -45,6 +47,7 @@ if std.all(std.map(function(prefix) !std.startsWith(key, prefix), unwantedPrefixes)) }; + local originalRaw = rawSpec.genesis.raw.top; local outSpec = rawSpec { genesis+: { @@ -52,8 +55,42 @@ top: cleanupRaw(raw) { [key]: originalRaw[key] for key in wantedKeys + if std.objectHas(originalRaw, key) }, }, }, }; -outSpec + +local + aliceAccount = sourceChain.System._encodeKey.Account(['0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d']), + totalIssuance = sourceChain.Balances._encodeKey.TotalIssuance([]), + unique = cql.calc(["10", "18", "**"]), + Munique = cql.calc([unique, "10", "6", "**", "*"]), +; + +outSpec { + genesis+: { + raw+: { + top+: { + [totalIssuance]: cql.calc([ + Munique, + if std.objectHas(super, totalIssuance) then sourceChain._decode(typeNames.u128, super[totalIssuance]) else '0', + if std.objectHas(super, aliceAccount) then sourceChain._decode(typeNames.AccountInfo, super[aliceAccount]).data.free else '0', + '-', '+', + ]), + [aliceAccount]: sourceChain._encode(typeNames.AccountInfo, { + nonce: 0, + consumers: 3, + providers: 1, + sufficients: 0, + data: { + free: Munique, + reserved: "0", + misc_frozen: "0", + fee_frozen: "0", + }, + },) + }, + }, + }, +} --- /dev/null +++ b/.docker/forkless-config/typeNames.jsonnet @@ -0,0 +1,51 @@ +function(chain) +local + typeName(id) = local + ty = chain._meta.types.types[id], + name = if std.objectHas(ty.type, "path") then + std.join('::', ty.type.path) + else if std.objectHas(ty.type.def, "primitive") then ty.type.def.primitive + else if std.objectHas(ty.type.def, "tuple") then "(" + std.join(', ', std.map(typeName, ty.type.def.tuple)) + ")" + else if std.objectHas(ty.type.def, "sequence") then "Vec<" + typeName(ty.type.def.sequence.type) + ">" + else if std.objectHas(ty.type.def, "array") then "[" + typeName(ty.type.def.array.type) + "; " + ty.type.def.array.len + "]" + else if std.objectHas(ty.type.def, "compact") then "Compact<" + typeName(ty.type.def.compact.type) + ">" + else error "Can't generate useable name for " + ty.type, + generics = if std.objectHas(ty.type, "params") then + '<' + std.join(', ', std.map(function(p) if p.type == null then 'Spec#'+id else typeName(p.type), ty.type.params)) + '>' + else '' + ; name + generics, + shortenPrefix(obj, prefix, short) = { + [short]: obj[field] + for field in std.objectFields(obj) + // There should be at most one element with this prefix + if std.startsWith(field, prefix) + }, +; + +local typesRaw = { + [typeName(id)]: id + for id in std.range(0, std.length(chain._meta.types.types)-1) +}; + +local types = typesRaw + shortenPrefix(typesRaw, 'frame_system::AccountInfo<', 'AccountInfo'); + +types +// local +// ; + +// local encoded = chain._encode(types['AccountInfo'], { +// nonce: 0, +// consumers: 3, +// providers: 1, +// sufficients: 0, +// data: { +// free: Munique, +// reserved: "0", +// misc_frozen: "0", +// fee_frozen: "0", +// }, +// }); + +// local systemAccount = chain._decode(types['AccountInfo'], encoded); + +// chain.System._encodeKey.Account(['0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d']) -- gitstuff