Bitcoin/public point to address: Difference between revisions

Content added Content deleted
(→‎{{header|Go}}: add sub-repo reference)
(→‎{{header|Perl}}: Perl 6 translation)
Line 309: Line 309:
{{out}}
{{out}}
<pre>16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM</pre>
<pre>16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM</pre>

=={{header|Perl 6}}==
{{trans|Perl}}
<lang perl6>use SSL::Digest;

constant BASE58 = <
1 2 3 4 5 6 7 8 9
A B C D E F G H J K L M N P Q R S T U V W X Y Z
a b c d e f g h i j k m n o p q r s t u v w x y z
>;

sub encode(Int $n) {
$n < BASE58 ??
BASE58[$n] !!
encode($n div 58) ~ BASE58[$n % 58]
}

sub public_point_to_address(Int $x is copy, Int $y is copy) {
my @bytes;
for 1 .. 32 { push @bytes, $y % 256; $y div= 256 }
for 1 .. 32 { push @bytes, $x % 256; $x div= 256 }
my $hash = rmd160 sha256 Blob.new: 4, @bytes.reverse;
my $checksum = sha256(sha256 Blob.new: 0, $hash.list).subbuf: 0, 4;
encode reduce * * 256 + * , 0, ($hash, $checksum)».list
}

say public_point_to_address
0x50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352,
0x2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6;</lang>
{{out}}
<pre>6UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM</pre>


=={{header|Tcl}}==
=={{header|Tcl}}==