does anyone knows how the half of secp256k1 generator was created?
No, because it was discussed for decades, and nobody shared the solution yet. For example:
https://www.youtube.com/watch?v=NGLR2N4EK58if it was created by someone then it should definitely have an answer.
And the creator certainly knew it. But it happened in the 90s, and now, we don't even have the original source code, which was used to create secp256k1 in the first place.
Also, the generator was not so important, because it was just given as an example. Different protocols and networks could use different generators.
Edit: Let's say, that someone would really want to get the same x-value for all curves:
secp160k1,
secp192k1,
secp224k1, and
secp256k1. In that case, it could be done in a provably fair way, by just hashing something with SHA-1.
SHA-1("34")=f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59And then, it could be used for all four curves:
magic=0xf1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59
p = 0xfffffffffffffffffffffffffffffffeffffac73
K = GF(p)
a = K(0x0000000000000000000000000000000000000000)
b = K(0x0000000000000000000000000000000000000007)
E = EllipticCurve(K, (a, b))
G = E.lift_x(magic)
E.set_order(0x0100000000000000000001b8fa16dfab9aca16b6b3 * 0x1)
d = 0x1
P = d * G
print(hex(P[0]),hex(P[1]))
p = 0xfffffffffffffffffffffffffffffffffffffffeffffee37
K = GF(p)
a = K(0x000000000000000000000000000000000000000000000000)
b = K(0x000000000000000000000000000000000000000000000003)
E = EllipticCurve(K, (a, b))
G = E.lift_x(magic)
E.set_order(0xfffffffffffffffffffffffe26f2fc170f69466a74defd8d * 0x1)
d = 0x1
P = d * G
print(hex(P[0]),hex(P[1]))
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffeffffe56d
K = GF(p)
a = K(0x00000000000000000000000000000000000000000000000000000000)
b = K(0x00000000000000000000000000000000000000000000000000000005)
E = EllipticCurve(K, (a, b))
G = E.lift_x(magic)
E.set_order(0x10000000000000000000000000001dce8d2ec6184caf0a971769fb1f7 * 0x01)
d = 0x1
P = d * G
print(hex(P[0]),hex(P[1]))
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
K = GF(p)
a = K(0x0000000000000000000000000000000000000000000000000000000000000000)
b = K(0x0000000000000000000000000000000000000000000000000000000000000007)
E = EllipticCurve(K, (a, b))
G = E.lift_x(magic)
E.set_order(0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 * 0x1)
d = 0x1
P = d * G
print(hex(P[0]),hex(P[1]))
Then, we would have these generators:
0xf1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59 0x600ea3a01f3440d7c72149ffeddbbf4adac6931a
0xf1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59 0x1196595f80903ac2083b8e8f747610d05086f97b73290e3a
0xf1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59 0x2a87d3bfa537ec6b7770dab5c2becd15e4449edc5ce462b8e904442b
0xf1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59 0x570f29a9c31e5071c825fbd851ab061878145b4fb0f2152516c04ce02cf79eea
And they could even be doubled, if someone would need it:
0xe25a6430a89769deda54de0967ba803482712681 0x6ba4a131765ea434e04302c2c9fda4f05e6333f5
0x05030d4bc376204b7cbe7aca85785c13e105c514cc0c95c6 0x995827385f204ac0cc8b4845dce013861b644575b665b01e
0x9f0db4893b0034c5cde53b97f8120aa9d695f8f7634b0730ca360346 0x461ad56d4abf48a371e91fe67400a184b461bc338fb77a9fc578f360
0x7ef889f3aba32f49170d7ed14529d74bddc3b4dbc3dbf69fdaa53d4f0f5cfe12 0xf56185816032bf11d1f877a1a784193de2bd8b3936296c1adfd5c552ecfb2480
But for some reason, that magic value around 0x48ce563f89a0ed9414f5aa28ad0d96d6795f9c62 was used. Even one bigger value would work for all four curves:
0x48ce563f89a0ed9414f5aa28ad0d96d6795f9c63 0x4c80552a4cdff5008657529ff0099a6ee990980e
0x48ce563f89a0ed9414f5aa28ad0d96d6795f9c63 0xc20dc9960bc82d2e8fa8e6521fe5ada3d6e539569c640d8
0x48ce563f89a0ed9414f5aa28ad0d96d6795f9c63 0x7f2bb64ace5c0ce64c928e128e30fc5a67163a6fd6ba88b30224473d
0x48ce563f89a0ed9414f5aa28ad0d96d6795f9c63 0x6fa8a092e8cfbb447972a525e94bc52c9bb542a6c07fd538e1a9e071b14d7c76
So, it is now simply unknown, why exactly these values were picked. Because as you can see, many others would work fine as well, if not better.