It's no longer a bug because since 7.21beta5 you have the ability to retrieve the original IPv6 address:
# here "example" is the name of the VETH you added
:foreach i in [/interface/veth/get example address] do={
:put [:typeof $i];
:put $i;
:if ([:typeof $i] = "ip-prefix") do={
:local realIP [:toip $i];
:put [:typeof $realIP];
:put $realIP;
}
:if ([:typeof $i] = "ip6-prefix") do={
:local realIP [:toip6 $i];
:put [:typeof $realIP];
:put $realIP;
}
:put "----"
}
Normally in other places of RouterOS where an IPv6 address together with a prefix length need to be stored (for example under /ipv6 address -> address or /ipv6 firewall address-list -> address) when you try to retrieve the value you get string, of type str.
However, with the VETH interface MikroTik decided to make address an array of either ip-prefix or ip6-prefix entries, instead of an array of strings.
ip6-prefix when converted to string, always zero-out the part behind the prefix, that's why your 2001:db8:1:1:1:1:1:1/64 became 2001:db8:1:1::/64. MikroTik did attempt to change this in 7.21beta2, however this modified behavior breaks scripts that exploited the behavior of ip6-prefix as you can read in my post and some discussion following that post.
MikroTik reverted the change in 7.21beta5 and added the ability to :toip6 to extract the original full IPv6 address from the prefix, as you can see in the pasted code above.
And in 7.21beta7 they update :toip to be able to get the IPv4 address from an ip-prefix too.