V7.21rc [testing] is released!

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.