Compare commits

..

No commits in common. "master" and "1.2" have entirely different histories.
master ... 1.2

19 changed files with 333 additions and 3559 deletions

View File

@ -1,9 +1,9 @@
coinbin
=======
A Open Source Browser Based Bitcoin Wallet. Version 1.7 beta by OutCast3k
A Open Source Browser Based Bitcoin Wallet. Version 1.2 beta by OutCast3k
Live version available at http://coinb.in/ or coinbin3ravkwb24f7rmxx6w3snkjw45jhs5lxbh3yfeg3vpt6janwqd.onion
Live version available at http://coinb.in/ or http://4zpinp6gdkjfplhk.onion
Github URL: https://github.com/OutCast3k/coinbin/
@ -24,13 +24,7 @@ Coinb.in supports a number of key features such as:
- Brain wallet support.
- Compatible with bitcoin-qt
- An offical .onion address for tor users.
- Offline qrcode creator and scanning tool.
- HD (bip32) support.
- Supports altcoins such as litecoin.
- Replace by fee (RBF) Support.
- Segwit Support.
- Bech32 address support.
- Fee calculator - https://coinb.in/#fees
- Transaction rebuild support for RBF and double spending.
- Offline qrcode creator and scanning tool
- HD (bip32) support
Donate to 33tht1bKDgZVxb39MnZsWa8oxHXHvUYE4G to see more development!
Donate to 1CWHWkTWaq1K5hevimJia3cyinQsrgXUvg to see more development!

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,6 @@ html, body {
}
body {
background-image: url("../images/background.jpg");
background-color:#ffffff;
}
@ -25,97 +24,3 @@ body {
background-color: #f5f5f5;
padding-top: 20px;
}
.alert {
overflow: hidden;
-ms-text-overflow: ellipsis;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
display: block;
}
#fees .txi_regular {
background: #d3d3d3;
}
#fees .txi_segwit {
background: #bae1ff;
}
#fees .txi_multisig {
background: #baffc9;
}
#fees .txi_hodl {
background: #ffdfba;
}
#fees .txi_unknown {
background: #ffb3ba;
}
#fees .txo_p2pkh {
background: #E679C8;
}
#fees .txo_p2sh {
background: #FAFE92;
}
#fees .txinputs {
}
#fees .txoutputs {
}
.hideOverflow {
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
#fees .slider {
-webkit-appearance: none;
appearance: none;
width: 100%;
height: 30px;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
border: 2px dotted #c3c3c3;
}
#fees .sliderbtn {
height: 30px;
width: 30px;
padding: 0px;
margin: 0px;
border: 0px;
}
#fees .slider:hover {
opacity: 1;
}
#fees .slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 32px;
height: 32px;
border: 0;
background: url('https://coinb.in/images/btc32x.png');
cursor: pointer;
}
#fees .slider::-moz-range-thumb {
width: 32px;
height: 32px;
border: 0;
background: url('https://coinb.in/images/btc32x.png');
cursor: pointer;
}
#fees .total {
font-size: 100px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,125 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 3080 952" enable-background="new 0 0 3080 952" xml:space="preserve">
<path fill="#695F3D" d="M131,263c0,0,249.3,150.4,475.5-6.7C606.4,256.2,401.2,87.1,131,263z"/>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="556.3605" y1="430.2783" x2="113.3624" y2="47.5836">
<stop offset="0" style="stop-color:#747573"/>
<stop offset="0.1084" style="stop-color:#E7E8E7"/>
<stop offset="0.3054" style="stop-color:#C5C6C4"/>
<stop offset="0.5025" style="stop-color:#FFFFFF"/>
<stop offset="0.6798" style="stop-color:#A7A9A6"/>
<stop offset="0.8571" style="stop-color:#DADADA"/>
<stop offset="1" style="stop-color:#686967"/>
</linearGradient>
<path fill="url(#SVGID_1_)" d="M286.3,171.8c-143.1,19.6-190.1,84.5-190.1,84.5l26.7,45.8l95.1,80L579.8,367l53.9-110.7
c-7.4-18.7-39.2-36-75.3-50.3C472.1,171.9,378.2,159.2,286.3,171.8z M146,256.2c252.8-143.2,433.7,0,433.7,0
C383.8,387.9,146,256.2,146,256.2z"/>
</g>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="96.1755" y1="519.8702" x2="633.6877" y2="519.8702">
<stop offset="0" style="stop-color:#747573"/>
<stop offset="0.1084" style="stop-color:#E7E8E7"/>
<stop offset="0.3054" style="stop-color:#C5C6C4"/>
<stop offset="0.5025" style="stop-color:#FFFFFF"/>
<stop offset="0.6798" style="stop-color:#A7A9A6"/>
<stop offset="0.8571" style="stop-color:#DADADA"/>
<stop offset="1" style="stop-color:#686967"/>
</linearGradient>
<path fill="url(#SVGID_2_)" d="M96.2,256.2l55.7,466.2c0,0,187.9,137.4,438.4,0l43.5-466.2c0,0-58.3,86.1-279.2,80.9
C354.5,337.1,145.8,332.8,96.2,256.2z"/>
<path fill="#E3B852" d="M193.5,277.6c0,0-53.8-94.7,73.6-102.8c0,0,104.3,6.2,94,139.5C361.1,314.3,258.2,307.8,193.5,277.6z"/>
<path fill="#E3B852" d="M385.8,314.3c0,0-14.6-96.1,93.6-110.3c34.8-4.6,76,21.6,78.9,57.5c0.2,2.5,0.3,5.1,0.2,7.8
C558.6,269.4,501.5,314.1,385.8,314.3z"/>
<path fill="#E3B852" d="M311.6,190.3c0,0,10.6-50.9,54.2-47.3c31.6,2.6,58.1,27.7,61.1,59.3c0.9,9.8-0.1,20.8-4.9,32.5l-16.2,54.4
c0,0-56.5,22.6-69.6-11.3L311.6,190.3z"/>
<path fill="#CDA547" d="M226,289.2c0,0-50.7-94.7,30.2-89.5c0,0,77.1,0.7,86.8,113C343,312.7,234.3,300,226,289.2z"/>
<path fill="#CDA547" d="M412.2,312.7c0,0-16.8-71,64.4-82c0,0,55.8-1.4,41.8,58.2C518.4,288.9,447.6,317,412.2,312.7z"/>
<g>
<path fill="#F8E2A3" d="M260,297.6l-0.4-11.1l-1.1-0.7l-13.8,0.4c0-2.7,0.3-5.1,0.6-7.5c1.9-0.3,3.5-0.3,5.2-0.4
c2.2-0.1,3.3-1.3,3.2-3.4l-1.2-31c-0.1-2.2-1.7-3.8-4.1-3.9l-1.4,0c-1.2,0-2.3,0.1-3.5,0.1c-1.2-2.3-1.3-4.4-1.4-6.5l6.4-0.6
l7.6-0.2l1.3-1.3l-0.4-10.2c2.4-0.3,4.5-0.4,6.6-0.5l0.4,4.6l0.2,6.3l1.1,0.7c1.7-0.1,3.2-0.1,4.8-0.1l1-1.1l-0.4-10.4
c2.3-0.4,4.3-0.4,6.3-0.5l0.7,5.4l0.2,5c0,1.2,0.7,1.3,1.5,1.4c4.6,0.3,8,1.1,11,2.7c4,2.1,5.6,5.1,6.2,7.3c0.9,3,0.5,6.2-1,8.8
c-0.9,1.5-2.1,2.7-3.7,3.7l-0.4,0.1l-0.8,0.7c1.4,1,2.8,1.6,4,2.4c4,2.9,6.3,6.1,6.9,9.9c0.8,4.6-1.3,10.8-7.7,14.3
c-3.5,1.9-7.6,2.9-12.6,3.1l-1.3,1.4l0.4,10.3c-2.4,0.3-4.4,0.4-6.4,0.5l-0.7-6l-0.2-5.1l-1.1-0.7c-1.6,0.1-3.1,0.1-4.6,0.1
l-1.2,1.2l0.4,10.5c-2.4,0.4-4.5,0.5-6.6,0.6l-0.1,0L260,297.6z M273.3,261c-1.9,0-3.8,0.1-5.7,0.2l-1.9,0.4l0.2,9.7l0.2,4.4
c0.1,1.9,0.3,2.1,2.3,2.1l3,0c2.4,0,5.2-0.1,8-0.7c2.4-0.5,4.1-1.3,5.5-2.4c2.1-1.8,3.3-4.4,2.9-6.8c-0.4-2.3-2-4.2-4.6-5.3
c-1-0.4-2.1-0.8-3.2-1l-2.3-0.3C276.3,261,274.8,261,273.3,261z M271.8,239.5c-1.7,0-3.4,0.1-5.1,0.2l-1.9,1l0.6,13.6l1,0.6l5.4,0
c2.6-0.1,5.5-0.4,8.2-1.9c1.7-1,3.1-2.6,3.5-4.5c0.4-1.6,0.2-3.3-0.7-4.8c-1.6-2.6-4.3-3.4-6.5-3.9
C274.9,239.6,273.4,239.5,271.8,239.5z"/>
</g>
<g>
<path fill="#F8E2A3" d="M462.3,302.9l0-3.7l-0.1-3.7l-5.9-0.8l-4.8,0.1l0.5-5.2c1.3-0.1,2.4-0.1,3.5-0.2c1.7-0.1,2.5-1,2.4-2.6
l-0.8-22c-0.1-1.7-1.3-2.8-3-2.9l-3.3,0.1c-0.9-1.5-0.9-3-1-4.4l4.3-0.3l5.5-0.2l1-1.1l-0.3-7.2l4.5-0.2l0.3,7.3
c2,0.8,3.1,0.8,4.2,0.8c0,0,0.1,0,0.1,0l0.7-4.5l-0.1-3.7c1.5-0.1,2.9-0.2,4.3-0.3l0.4,3.7l0.1,3.9l1.1,0.7
c3.2,0.2,5.7,0.8,7.8,1.9c2.8,1.4,3.9,3.6,4.3,5.1c0.6,2.1,0.4,4.3-0.7,6.1c-0.6,1-1.5,1.9-2.6,2.6c0.3,1.5,1.2,1.9,2,2.5
c2.8,2,4.4,4.3,4.8,6.9c0.5,3.2-0.9,7.6-5.4,10c-2.5,1.3-5.4,2-8.8,2.2l-0.4,0l-0.7,1.1l0.3,7.3l-4.4,0.2l-0.3-3.8l-0.1-3.7
l-4.2-0.8l-0.8,4.7l0.1,3.7c-1.6,0.1-3.1,0.2-4.5,0.3H462.3L462.3,302.9z M471.6,277c-1.4,0-2.8,0.1-4.3,0.1l-1.3,1l0.4,9.4
c0.1,1.4,0.2,1.6,1.7,1.6l2,0c1.9,0,3.9-0.1,5.9-0.5c1.7-0.4,2.9-0.9,3.9-1.7c1.5-1.3,2.4-3.2,2.1-4.9c-0.3-1.7-1.4-3.1-3.3-3.9
c-0.7-0.3-1.5-0.5-2.3-0.7l-1.6-0.2C473.8,277,472.7,277,471.6,277z M470.6,261.8c-1.1,0-2.3,0.1-3.5,0.1l-0.4,0l-1.2,0.8l0.4,9.4
l1.7,0.8l3,0c1.8-0.1,4-0.3,5.9-1.3c1.3-0.7,2.2-1.9,2.6-3.2c0.3-1.2,0.1-2.4-0.5-3.5c-1.1-1.8-3.1-2.5-4.6-2.8
C472.8,261.8,471.7,261.8,470.6,261.8z"/>
</g>
<path fill="#CDA547" d="M338.5,195.4c0,0,8.7-47.5,50.4-16.8c0,0,27.2,26.1,0,71.9c0,0-6.9,8.9-12.8,15.4c-3.4,3.8-9.3,3.8-12.9,0.2
C352.8,255.6,334.2,231.3,338.5,195.4z"/>
<g>
<path fill="#F8E2A3" d="M360.9,242.2l-0.2-7.5l-6.8-0.7l-3.9,0.1l0.6-5.2c1.3-0.1,2.4-0.1,3.5-0.2c1.6-0.1,2.4-1,2.4-2.5l-0.8-22
c-0.1-1.7-1.3-2.8-3-2.9c-0.4,0-2.8,0-3.5,0.1l-0.8-4.5l4.3-0.3l5.5-0.2l1-1.1l-0.3-7.2l4.5-0.2l0.3,7.3c2,0.8,3.1,0.8,4.1,0.8
c0,0,0.1,0,0.1,0l0.7-3.8l-0.2-4.4l4.4-0.3l0.4,3.4l0.1,4.2l1.1,0.7c3.2,0.2,5.7,0.8,7.8,1.9c2.8,1.4,3.9,3.6,4.3,5.1
c0.6,2.1,0.4,4.3-0.7,6.1c-0.6,1-1.5,1.9-2.6,2.6c0.5,1.6,1.3,2,2,2.5c2.8,2,4.4,4.3,4.8,6.9c0.5,3.2-0.9,7.6-5.4,10
c-2.5,1.3-5.4,2-8.8,2.2l-1.1,1.1l0.3,7.3c-1.6,0.1-3,0.1-4.4,0.2l-0.4-5l-0.1-2.4l-4.1-0.8l-0.8,4.7l0.1,3.7
c-1.6,0.1-3.1,0.2-4.5,0.3H360.9L360.9,242.2z M366.2,216.5l-1.3,0.3l0.2,9.8c0.1,1.7,0.3,1.9,1.8,1.9l2.1,0c1.8,0,3.8-0.1,5.8-0.5
c1.7-0.4,2.9-0.9,3.9-1.7c1.5-1.3,2.4-3.2,2.1-4.9c-0.3-1.7-1.4-3.1-3.3-3.9c-0.7-0.3-1.5-0.5-2.3-0.7l-1.6-0.2
c-1.1-0.1-2.2-0.2-3.3-0.2C369,216.3,366.2,216.5,366.2,216.5z M369.3,201.1c-1.2,0-2.4,0.1-3.6,0.1l-0.1,0.1l-1.4,0.7l0.4,9.3
l1.4,0.8l3.2,0c1.9-0.1,4-0.3,5.9-1.3c1.3-0.7,2.2-1.9,2.6-3.2c0.3-1.2,0.1-2.4-0.5-3.5c-1.1-1.9-3.1-2.5-4.6-2.8
C371.5,201.2,370.4,201.1,369.3,201.1z"/>
</g>
<g>
<path fill="#686967" d="M364.5,789.4c-102.8,0-176.6-39-204.6-56.5c-7.6-4.7-12.5-12.6-13.6-21.6L93.2,261.4l3-5.2l58.4,454
c0.8,6.5,4.3,12.1,9.7,15.5c44.1,27.7,204,109.3,411.7-0.4c6.3-3.3,10.7-9.9,11.4-17.2l46.3-451.9l4.2,5.2L595.7,709
c-1,10-7,19.2-15.8,23.8C499.9,775,426.9,789.4,364.5,789.4z"/>
</g>
<path fill="#CDA547" d="M2290.3,592.5c0-25.4,19.1-42.9,46.4-42.9c26.8,0,45.4,17.1,45.9,42.9c0,24.5-18.5,42.5-46.9,42.5
C2309.3,634.9,2290.3,616.9,2290.3,592.5z"/>
<g>
<g>
<path fill="#5F615E" d="M943.1,637.9c-94.7,0-153.5-50.6-153.5-132.1c0-82.3,66.8-137.6,166.3-137.6c22.6,0,47.3,3.4,65.7,9
l-12.6,53.3c-13.4-4.5-29.7-6.8-48.8-6.8c-25.5,0-47.8,8.4-62.9,23.8c-14,14.2-21.3,33.3-21,55.1c0,47.1,34.5,78.8,85.7,78.8
c19,0,35.3-2.4,49.7-7.3l9.5,52.9C1003.4,633.7,973.4,637.9,943.1,637.9z"/>
</g>
<g>
<path fill="#5F615E" d="M1207.3,638.5c-89.6,0-149.9-53.5-149.9-133.2c0-83.6,61-137.6,155.3-137.6c88.2,0,147.4,53.3,147.4,132.7
C1360.2,595.8,1283.4,638.5,1207.3,638.5z M1209.7,418.8c-48,0-65.1,45.4-65.1,84.3c0,51.2,25.5,84.3,65.1,84.3
c38.4,0,63.2-33.3,63.2-84.8C1273,463.9,1256.4,418.8,1209.7,418.8z"/>
</g>
<g>
<path fill="#5F615E" d="M1782.6,632.5V488.9c0-39.9-18.1-61.9-51-61.9c-22.9,0-42.1,12.5-51.3,33.6c-2.3,5.2-3.4,12.3-3.4,22.4
v149.5h-84.2V455.1c0-30.8-1-57.1-2.2-80.9h72.3l4.3,37.1h7.7l1.3-1.8c13.9-20,44.5-41.3,88.5-41.3c65.1,0,102.4,40.4,102.4,110.8
v153.4H1782.6z"/>
</g>
<g>
<path fill="#5F615E" d="M2115.7,638.5c-26.9,0-63.7-7.1-86-41.2l-1.2-1.9h-6l-1.6,3.8l-3.3,33.3h-70.3c1.1-17.7,2.2-47.1,2.2-75.4
V253.8h84.2v152.1h6.2l2.5-1.6c17.9-23.2,48.7-36,86.8-36c32.8,0,61.3,11.3,82.5,32.7c23.6,23.8,35.9,57.6,35.6,97.7
C2247.3,594.7,2179.1,638.5,2115.7,638.5z M2093.8,423.7c-27.3,0-51.8,18.5-58.2,44c-1.3,5.3-1.9,10.7-1.9,16.3v39.2
c0,5.8,0.7,11.1,2,15.8c7,24.9,30.9,42.3,58.2,42.3c42.6,0,68.1-29.7,68.1-79.4C2161.9,453.7,2135.8,423.7,2093.8,423.7z"/>
</g>
<g>
<path fill="#5F615E" d="M2807.8,632.5V488.9c0-39.9-18.1-61.9-51-61.9c-22.9,0-42.1,12.5-51.3,33.6c-2.3,5.2-3.4,12.3-3.4,22.4
v149.5h-84.2V455.1c0-30.8-1-57.1-2.2-80.9h72.3l4.3,37.1h7.7l1.3-1.8c13.9-20,44.5-41.3,88.5-41.3c65.1,0,102.4,40.4,102.4,110.8
v153.4H2807.8z"/>
</g>
<g>
<rect x="1430.2" y="258.7" fill="#5F615E" width="76" height="73.4"/>
</g>
<g>
<rect x="1425.5" y="373.5" fill="#5F615E" width="80.7" height="257.2"/>
</g>
<g>
<rect x="2473.9" y="258.7" fill="#5F615E" width="76" height="73.4"/>
</g>
<g>
<rect x="2469.2" y="373.5" fill="#5F615E" width="80.7" height="257.2"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 724 B

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,211 +0,0 @@
/* ========================================================================
* Bootstrap: collapse.js v3.3.4
* http://getbootstrap.com/javascript/#collapse
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// COLLAPSE PUBLIC CLASS DEFINITION
// ================================
var Collapse = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Collapse.DEFAULTS, options)
this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
'[data-toggle="collapse"][data-target="#' + element.id + '"]')
this.transitioning = null
if (this.options.parent) {
this.$parent = this.getParent()
} else {
this.addAriaAndCollapsedClass(this.$element, this.$trigger)
}
if (this.options.toggle) this.toggle()
}
Collapse.VERSION = '3.3.4'
Collapse.TRANSITION_DURATION = 350
Collapse.DEFAULTS = {
toggle: true
}
Collapse.prototype.dimension = function () {
var hasWidth = this.$element.hasClass('width')
return hasWidth ? 'width' : 'height'
}
Collapse.prototype.show = function () {
if (this.transitioning || this.$element.hasClass('in')) return
var activesData
var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
if (actives && actives.length) {
activesData = actives.data('bs.collapse')
if (activesData && activesData.transitioning) return
}
var startEvent = $.Event('show.bs.collapse')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
if (actives && actives.length) {
Plugin.call(actives, 'hide')
activesData || actives.data('bs.collapse', null)
}
var dimension = this.dimension()
this.$element
.removeClass('collapse')
.addClass('collapsing')[dimension](0)
.attr('aria-expanded', true)
this.$trigger
.removeClass('collapsed')
.attr('aria-expanded', true)
this.transitioning = 1
var complete = function () {
this.$element
.removeClass('collapsing')
.addClass('collapse in')[dimension]('')
this.transitioning = 0
this.$element
.trigger('shown.bs.collapse')
}
if (!$.support.transition) return complete.call(this)
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
this.$element
.one('bsTransitionEnd', $.proxy(complete, this))
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
}
Collapse.prototype.hide = function () {
if (this.transitioning || !this.$element.hasClass('in')) return
var startEvent = $.Event('hide.bs.collapse')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
var dimension = this.dimension()
this.$element[dimension](this.$element[dimension]())[0].offsetHeight
this.$element
.addClass('collapsing')
.removeClass('collapse in')
.attr('aria-expanded', false)
this.$trigger
.addClass('collapsed')
.attr('aria-expanded', false)
this.transitioning = 1
var complete = function () {
this.transitioning = 0
this.$element
.removeClass('collapsing')
.addClass('collapse')
.trigger('hidden.bs.collapse')
}
if (!$.support.transition) return complete.call(this)
this.$element
[dimension](0)
.one('bsTransitionEnd', $.proxy(complete, this))
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)
}
Collapse.prototype.toggle = function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
Collapse.prototype.getParent = function () {
return $(this.options.parent)
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
.each($.proxy(function (i, element) {
var $element = $(element)
this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
}, this))
.end()
}
Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
var isOpen = $element.hasClass('in')
$element.attr('aria-expanded', isOpen)
$trigger
.toggleClass('collapsed', !isOpen)
.attr('aria-expanded', isOpen)
}
function getTargetFromTrigger($trigger) {
var href
var target = $trigger.attr('data-target')
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
return $(target)
}
// COLLAPSE PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.collapse')
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.collapse
$.fn.collapse = Plugin
$.fn.collapse.Constructor = Collapse
// COLLAPSE NO CONFLICT
// ====================
$.fn.collapse.noConflict = function () {
$.fn.collapse = old
return this
}
// COLLAPSE DATA-API
// =================
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
var $this = $(this)
if (!$this.attr('data-target')) e.preventDefault()
var $target = getTargetFromTrigger($this)
var data = $target.data('bs.collapse')
var option = data ? 'toggle' : $this.data()
Plugin.call($target, option)
})
}(jQuery);

7
js/moment.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,59 +0,0 @@
/* ========================================================================
* Bootstrap: transition.js v3.3.4
* http://getbootstrap.com/javascript/#transitions
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// ============================================================
function transitionEnd() {
var el = document.createElement('bootstrap')
var transEndEventNames = {
WebkitTransition : 'webkitTransitionEnd',
MozTransition : 'transitionend',
OTransition : 'oTransitionEnd otransitionend',
transition : 'transitionend'
}
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return { end: transEndEventNames[name] }
}
}
return false // explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false
var $el = this
$(this).one('bsTransitionEnd', function () { called = true })
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
setTimeout(callback, duration)
return this
}
$(function () {
$.support.transition = transitionEnd()
if (!$.support.transition) return
$.event.special.bsTransitionEnd = {
bindType: $.support.transition.end,
delegateType: $.support.transition.end,
handle: function (e) {
if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
}
}
})
}(jQuery);

42
sha1sum
View File

@ -1,40 +1,28 @@
---- Version 1.7 2021.10.23 ----
77e4519962e2f6a9fc93342137dbb31c33b76b04 ./js/aes.js
3a09a8fc0cfe828b57fc798d668234d0490ee1a6 ./js/bootstrap-datetimepicker.min.js
253711c6d825de55a8360552573be950da180614 ./js/bootstrap.min.js
61095a685a6bb343fc5dcdd7cf3e458bfb3aa0a4 ./js/coinbin.js
5f83da7e2fce8c55a711a768970899c2300dcd46 ./js/coin.js
988565bc2cb402d63ed5c5fd7ff47c4278efc2c5 ./js/collapse.js
9ba5ede3d7f9d4c8fd623395f196adfdcf7e970f ./js/crypto-min.js
f7c09f2f5a721371e7d478050119f7e2d58e3ef9 ./js/crypto-sha256-hmac.js
0700fc9ad2e39adeca0b50614bb3d327fb49f609 ./js/crypto-sha256.js
---- Version 1.2 2015.07.23 ----
e6810907c901e6bd34a28735a68850936f0823b8 ./js/ellipticcurve.js
ae49e56999d82802727455f0ba83b63acd90a22b ./js/jquery-1.9.1.min.js
be17ca7c834204bff711f582e41f76c06d472bac ./js/jsbn.js
ce4fa351a2e62accf7fad77110fa4ddb09a324bf ./js/moment.min.js
9ba5ede3d7f9d4c8fd623395f196adfdcf7e970f ./js/crypto-min.js
77e4519962e2f6a9fc93342137dbb31c33b76b04 ./js/aes.js
0ce26da5ef686d4ece91acd6cb6506559e11ab07 ./js/qcode-decoder.min.js
be17ca7c834204bff711f582e41f76c06d472bac ./js/jsbn.js
0700fc9ad2e39adeca0b50614bb3d327fb49f609 ./js/crypto-sha256.js
253711c6d825de55a8360552573be950da180614 ./js/bootstrap.min.js
f7c09f2f5a721371e7d478050119f7e2d58e3ef9 ./js/crypto-sha256-hmac.js
ad038e1f39646b68ae666324ed4c2882a8c42474 ./js/qrcode.js
64eb4ea5c882f8bce3e1885bf00728455f1c2f4c ./js/ripemd160.js
114089ef2a3feb6d4db4f9cabcb186d7750d5884 ./js/sha512.js
506c40035e0d22560478629434d0fea27643b77a ./js/transition.js
5f570018ed044eafd464f7e0ab1783b966224055 ./LICENSE
255c58c17e63eb54adb3cd02b5c06224c67fc364 ./css/bootstrap-datetimepicker.min.css
3ff26f7ca616b01742a25f9aa304bdb653ce4a4d ./js/coin.js
cb26a4ae2216754f3089daaf7605e3ac41410126 ./js/coinbin.js
ae49e56999d82802727455f0ba83b63acd90a22b ./js/jquery-1.9.1.min.js
5f570018ed044eafd464f7e0ab1783b966224055 ./LICENCE
ed29315e0ffb3f14382431f2724235bf67f44eb3 ./css/bootstrap.min.css
fc6b4268fbd57ad95d2b41a1d4d6866f222fbdb2 ./css/bootstrap-theme.min.css
7e3254913742a0b71d5608873047c1a48e82b9be ./css/style.css
5ca7213f06ac542b72b0293aaf861a476fe9968d ./images/background.jpg
2e3217a3f3b7c2fb30562ab9a4ef9a407ae81897 ./images/btc32x.png
2c95cc283e4d843655ea111a7e4072c16ab56b7b ./images/bitrefill16x.png
b6e8cb7bc6e7a9cb167e65696439891fc06ded6d ./images/changelly16x.png
774cf795e16b33c5d67b5ad0ae95692c3ce49fce ./images/coinbin.png
f4fbd6f11bf1d81b0fdba3bfb83799fda6c46c67 ./images/coinbin.svg
7645c6b897dc845ed681fad0812b424063374494 ./images/hodlhodl16x.png
8297b8f4d686ec6c65981077514975e06ce41812 ./css/style.css
8ac24915d59cef71c542e7cb7d7e153f560cba1f ./images/coinbin.gif
f2af060f1cadbc9065c8c465c648dc01be67cc12 ./images/loader.gif
86b6f62b7853e67d3e635f6512a5a5efc58ea3c3 ./fonts/glyphicons-halflings-regular.eot
ca35b697d99cae4d1b60f2d60fcd37771987eb07 ./fonts/glyphicons-halflings-regular.woff2
de51a8494180a6db074af2dee2383f0a363c5b08 ./fonts/glyphicons-halflings-regular.svg
278e49a86e634da6f2a02f3b47dd9d2a8f26210f ./fonts/glyphicons-halflings-regular.woff
44bc1850f570972267b169ae18f1cb06b611ffa2 ./fonts/glyphicons-halflings-regular.ttf
283e5a5aa0999fb8e84bdc7a0f2a881db249baf1 ./README.md
57749e14fea7e159c56b6dda9e982aef99985861 ./index.html
7130b64e3ef4cf6f2f1550e902f081c58dc053de ./test.html
fe8d57914bb036ab94e86ec35b2671eeb6d20d0d ./README.md
f4803ce0396b7e65d2f9dd4a5ae232b32403ef19 ./index.html

379
test.html
View File

@ -1,379 +0,0 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<!-- =================================================================== -->
<head>
<title>TESTING COINBIN</title>
<link rel="stylesheet" href="css/bootstrap.min.css" media="screen">
<link rel="stylesheet" href="css/bootstrap-datetimepicker.min.css">
<link rel="stylesheet" href="css/style.css" media="screen">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/moment.min.js"></script>
<script type="text/javascript" src="js/transition.js"></script>
<script type="text/javascript" src="js/collapse.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="js/crypto-min.js"></script>
<script type="text/javascript" src="js/crypto-sha256.js"></script>
<script type="text/javascript" src="js/crypto-sha256-hmac.js"></script>
<script type="text/javascript" src="js/sha512.js"></script>
<script type="text/javascript" src="js/ripemd160.js"></script>
<script type="text/javascript" src="js/aes.js"></script>
<script type="text/javascript" src="js/jsbn.js"></script>
<script type="text/javascript" src="js/ellipticcurve.js"></script>
<script type="text/javascript" src="js/coin.js"></script>
</head>
<!-- =================================================================== -->
<body>
<!-- =================================================================== -->
<div id="fwrap">
<!-- Fixed navbar -->
<div id="header" class="navbar navbar-default " role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="#home" class="navbar-brand" id="homeBtn"><img src="images/coinbin.gif" style="height:25px;margin-top:-5px"></a>
</div>
</div>
</div>
<div id="content" class="container">
<div class="tab-content">
<div class="tab-pane tab-content active" id="home">
<br />
<button id="test1Btn" class="btn btn-primary" type="submit">Run Coinbin Test Suite</button>
<br />
<textarea rows=20 cols=86 id="testResults"></textarea>
</div>
</div> <!-- content -->
</div> <!-- wrap -->
</div> <!-- navbar -->
</div> <!-- container -->
</body>
<script type="text/javascript">
$(document).ready(function() {
}); // end of document.ready
$("#test1Btn").click(function(){
{
var testName = "hex private key to compressed address";
var testInput = "0000000000000000000000000000000000000000000000000000000000000001";
var testExpected = "1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH";
coinjs.compressed = true;
var pubkeyHex = coinjs.newPubkey(testInput);
var testOutput = coinjs.pubkey2address(pubkeyHex, coinjs.pub);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "hex private key to uncompressed address";
var testInput = "0000000000000000000000000000000000000000000000000000000000000001";
var testExpected = "1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm";
coinjs.compressed = false;
var pubkeyHex = coinjs.newPubkey(testInput);
var testOutput = coinjs.pubkey2address(pubkeyHex, coinjs.pub);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "WIF uncompressed private key to address";
var testInput = "5J1LYLWqNxJBTwdGAmzYnpkqqSuFu48fsHv8jgojFMV2Z8exk9L";
var testExpected ="16SK7HnxBMRxSpLhhdf8RYcqv8MPJiSF6Q";
coinjs.compressed = false;
var testOutput = coinjs.wif2address(testInput).address;
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "raw private key to uncompressed base58check WIF private key";
var testInput = "62A87AD3272B41E67108FEA10C57BA6ED609F2F7A2264A83B690CD45707090D1";
var testExpected = "5JZjfs5wJv1gNkJXCmYpyj6VxciqPkwmK4yHW8zMmPN1PW7Hk7F";
coinjs.compressed = false;
var testOutput = coinjs.privkey2wif(testInput);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "raw private key to compressed base58check WIF private key";
var testInput = "62A87AD3272B41E67108FEA10C57BA6ED609F2F7A2264A83B690CD45707090D1";
var testExpected = "KzXVLY4ni4yznz8LJwdUmNoGpUfebSxiakXRqcGAeuhihzaVe3Rz";
coinjs.compressed = true;
var testOutput = coinjs.privkey2wif(testInput);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "hex ripemd160 hash of public key, to base58check address";
var testInput = "62E907B15CBF27D5425399EBF6F0FB50EBB88F18";
var testExpected = "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa";
var testOutput = coinjs.scripthash2address(testInput);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "base58check address, to hex ripemd160 hash of public key";
var testInput = "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa";
var testExpected = "62e907b15cbf27d5425399ebf6f0fb50ebb88f18";
var bytes = coinjs.base58decode(testInput);
var front = bytes.slice(1, bytes.length-4);
var testOutput = Crypto.util.bytesToHex(front);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "convert 'Hash 160' to address";
var testInput = "119b098e2e980a229e139a9ed01a469e518e6f26";
var testExpected = "12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX";
var testOutput = coinjs.scripthash2address(testInput);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "convert 'SHA256' to address";
var testInput = "904b8a01c68095a9e825d28082c04b75b1f56277648256985717620e8913b79b";
var testExpected = "1JNC98D5LZbrGHFR8shDwiqLPGfpg15BUM";
var r = ripemd160(Crypto.util.hexToBytes(testInput));
r.unshift(coinjs.pub);
var hash = Crypto.SHA256(Crypto.SHA256(r, {asBytes: true}), {asBytes: true});
var checksum = hash.slice(0, 4);
var testOutput = coinjs.base58encode(r.concat(checksum));
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "convert WIF private key to address bech32";
var testInput = "L3GzRAGwCqfSNFr6g1NQm7edn29DgAKZJ6owUBqYELpP6Kbim5kM";
var testExpected = "bc1qhmc0vk4xzr37ayv7tlyhns7x4dk04tyvflk8ey";
var pubkey = coinjs.wif2pubkey(testInput);
var testOutput = coinjs.bech32Address(pubkey.pubkey).address;
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "bech32 address, to hex ripemd160 hash of public key";
var testInput = "bc1qhmc0vk4xzr37ayv7tlyhns7x4dk04tyvflk8ey";
var testExpected = "bef0f65aa610e3ee919e5fc979c3c6ab6cfaac8c";
var testOutput = coinjs.bech32redeemscript(testInput);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "prefix1 - WIF compressed private key to address (bitcoin)";
var testInput = "Kx4VFK8gXu4qBv73x9b1KFnWYqKekkprYyfX9QhFUMQhrTUooXKc";
var testExpected = "1NFeCVtA3zuCUAmYheRvfyABnSZCHfrR3j";
var testOutput = coinjs.wif2address(testInput).address;
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "prefix2 - WIF compressed private key to address (bitcoin-testnet)";
var testInput = "92Wn1EBgiwDNT8SC7WMZfcSk2y3mQkLUPAQtwMNYZQGAzCFUTdu";
var testExpected = "mxToLbBqPcSNnqPCSnrYjFv172TFPLjVNf";
var saved = pushNetworkVars("btc-testnet");
var testOutput = coinjs.wif2address(testInput).address;
popNetworkVars(saved);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "prefix3 - WIF compressed private key to address (litecoin)";
var testInput = "6vVAeKejJRV5wgrAqtqi7eQsS4Zf79nkw8xuYntU3JwHCiexYaJ";
var testExpected = "LMzBLYQG2opHvMBihMQgJBboxunoj5pssC";
var saved = pushNetworkVars("ltc-mainnet");
var testOutput = coinjs.wif2address(testInput).address;
popNetworkVars(saved);
addTestOutput(testName, testOutput, testExpected);
}
{
var testName = "prefix4 - WIF compressed private key to address (dogecoin)";
var testInput = "6KayMYAEQfFACQhZUzbBpFhvGzDWSmRtaY9NrPQGig9qVzRCzQf";
var testExpected = "DHEPGdnS46dHT79tkfm5DyhGAbQj4Xi8Ni";
var saved = pushNetworkVars("doge-mainnet");
var testOutput = coinjs.wif2address(testInput).address;
popNetworkVars(saved);
addTestOutput(testName, testOutput, testExpected);
}
{
// this test comes from https://bitcoindev.network/guides/bitcoinjs-lib/bitcoin-script-puzzles/
var testName = "P2SH redeem script to address (bitcoin testnet)";
var testInput = "935587";
var testExpected = "2N7WfHK1ftrTdhWej8rnFNR7guhvhfGWwFR";
var saved = pushNetworkVars("btc-testnet");
var hash = Crypto.SHA256(Crypto.util.hexToBytes(testInput), {asBytes: true});
var r = ripemd160(hash);
r.unshift(coinjs.multisig);
var hash = Crypto.SHA256(Crypto.SHA256(r, {asBytes: true}), {asBytes: true});
var checksum = hash.slice(0, 4);
var testOutput = coinjs.base58encode(r.concat(checksum));
addTestOutput(testName, testOutput, testExpected);
popNetworkVars(saved);
}
{
// this test comes from https://bitcoindev.network/guides/bitcoinjs-lib/bitcoin-script-puzzles/
var testName = "P2WSH redeem script to address (bitcoin testnet)";
var testInput = "935587";
var testExpected = "bcrt1qpt7c23c0wep9e8up4ywn070w3tqz3828ngy34aj8slsfxrh08ddq2d2pyu";
var hash = Crypto.SHA256(Crypto.util.hexToBytes(testInput), {asBytes: true});
var testOutput = coinjs.bech32_encode(/*coinjs.bech32.hrp*/"bcrt", [coinjs.bech32.version].concat(coinjs.bech32_convert(hash, 8, 5, true)));
addTestOutput(testName, testOutput, testExpected);
}
{
// data from https://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx (runeks)
var testName = "basic transaction building bitcoin";
var testExpectedUnsigned = "0100000001eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2010000001976a914010966776006953d5567439e5e39f86a0d273bee88acffffffff01605af405000000001976a914097072524438d003d23a2f23edb65aae1bb3e46988ac00000000";
var testExpectedSigned = "0100000001eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2010000008a4730440220299fffaf20745458111e7826e5c2cca3b78dd27c97e0a513aab807f0d724103402203247498cfb019bbbd3d629814c8703e974f177478f6fde53503a9b1088852fad01410450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6ffffffff01605af405000000001976a914097072524438d003d23a2f23edb65aae1bb3e46988ac00000000";
var privKeyHex = "18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725";
var inputTx = "f2b3eb2deb76566e7324307cd47c35eeb88413f971d88519859b1834307ecfec";
var inputScript = "76a914010966776006953d5567439e5e39f86a0d273bee88ac";
var inputN = 1;
var address0 = "097072524438d003d23a2f23edb65aae1bb3e469";
var amount = 0.999;
coinjs.compressed = false;
var r = coinjs.transaction();
var wif = coinjs.privkey2wif(privKeyHex);
var address1 = coinjs.scripthash2address(address0);
r.addinput(inputTx, inputN, inputScript, 0xffffffff/*sequence*/);
r.addoutput(address1, amount);
var testOutputUnsigned = r.serialize();
debugger;
r.sign(wif, 1/*sighashtype*/);
var testOutputSigned = r.serialize();
addTestOutput(testName+" (unsigned)", testOutputUnsigned, testExpectedUnsigned);
addTestOutput(testName+" (signed)", testOutputSigned, testExpectedSigned);
}
{
// bitcoin testnet transaction https://tbtc.bitaps.com/04bbae5806d2b8fb17ed9339f42c6f6d731191a974b975d2e1df8e7601e90f6f
var saved = pushNetworkVars("btc-testnet");
var testName = "basic transaction building bitcoin-testnet";
var testExpectedUnsigned = "0100000001c72eabf9f208cacc908538e2609bbe665ffda680e2a6c39475941389dd5b14de000000001976a914b9e16a03bbf40ebb78cbc35e22d72a695f27624088acffffffff01703a0f00000000001976a914a447681601eef322926c0b3de5dfbb4157bbe40988ac00000000";
var testExpectedSigned = "0100000001c72eabf9f208cacc908538e2609bbe665ffda680e2a6c39475941389dd5b14de000000008b483045022100d909d4d3d2b540891c102d06fc8eaf1e9b914b93ea28626990666554a75b369102205a73b38071eab5b0acb8381c1454e7d998c80cd6d229645231b6bc1fb024d1d70141046fad107ba21fae3f047096152d0298291168bc0cb6b834f7cc77510dcb41839206b936649623988f7ca58c6104a22105c5b398912ded514685ebd0d8ac4011c2ffffffff01703a0f00000000001976a914a447681601eef322926c0b3de5dfbb4157bbe40988ac00000000";
var wif = "92Wn1EBgiwDNT8SC7WMZfcSk2y3mQkLUPAQtwMNYZQGAzCFUTdu";
var inputTx = "de145bdd8913947594c3a6e280a6fd5f66be9b60e2388590ccca08f2f9ab2ec7";
var inputScript = "76a914b9e16a03bbf40ebb78cbc35e22d72a695f27624088ac";
var inputN = 0;
var address1 = "mvVaevwNK2SdNj9kcugh29HbSLPhv7xszY";
var amount = 0.00998;
coinjs.compressed = true;
var r = coinjs.transaction();
r.addinput(inputTx, inputN, inputScript, 0xffffffff/*sequence*/);
r.addoutput(address1, amount);
var warnings = new Array;
var testOutputUnsigned = r.serialize();
r.sign(wif, 1/*sighashtype*/, warnings);
var testOutputSigned = r.serialize();
popNetworkVars(saved);
addTestOutput(testName+" (unsigned)", testOutputUnsigned, testExpectedUnsigned);
addTestOutput(testName+" (signed)", testOutputSigned, testExpectedSigned);
}
// create a lot of timelock scripts, compare them to known ones created using bitcoinjs-lib
// focus on edge cases like described in https://github.com/OutCast3k/coinbin/issues/201
// ranges 80-ff, 8000-ffff, 800000-ffffff, 80000000-ffffffff.
{
var testExpected = "HODL_depositAddress: 2NAx7Sx9B6epdUGyPeUEAU2tJiPectEym4F HODL_redeemScript: 050000008000b175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac\n" +
"HODL_depositAddress: 2N5VZkAjtGerFUrc3bKjuK3whVEyaoKQceg HODL_redeemScript: 0400000008b175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac\n" +
"HODL_depositAddress: 2MyN366sJLwXTMVMsMTHxi1bSJBwZwmNsQ4 HODL_redeemScript: 0400008000b175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac\n" +
"HODL_depositAddress: 2NFjqkVBLKXjFLGPDpSoBTbhVsccUrqhRLW HODL_redeemScript: 03000008b175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac\n" +
"HODL_depositAddress: 2N555b2vUzCJ5t8DryLYTw6vggH87SrK14b HODL_redeemScript: 03008000b175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac\n" +
"HODL_depositAddress: 2N31s67tdRuaVfQipgkozEXd9jAt4saniH5 HODL_redeemScript: 020008b175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac\n" +
"HODL_depositAddress: 2N9vLAD9f1WqFiJXinC9oCxDhypz36ZzaT7 HODL_redeemScript: 028000b175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac\n" +
"HODL_depositAddress: 2MxRBGmDkNK44wCw2NMNq12UKxuPmkN8Wrx HODL_redeemScript: 58b175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac\n";
var testOutput = "";
var saved = pushNetworkVars("btc-testnet");
var testName = "timelocks";
var timeLock = 0x80000000;
while (timeLock > 0) {
//var timeLock = Math.pow(2,n)-1;
//var timeLock = 16777215;
var wif = "cMahea7zqjxrtgAbB7LSGbcQUr1uX1ojuat9jZodMN87JcbXMTcA"; // TESTNET pubKey="0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", addr="mrCDrCybB6J1vRfbwM5hemdJz73FwDBC8r"
var pubkey = coinjs.wif2pubkey(wif);
var myHodl = coinjs.simpleHodlAddress(pubkey.pubkey, timeLock);
testOutput += 'HODL_depositAddress: ' + myHodl.address + ' ';
testOutput += 'HODL_redeemScript: ' + myHodl.redeemScript + '\n';
timeLock = (timeLock >>> 4);
}
popNetworkVars(saved);
addTestOutput(testName, testOutput, testExpected);
}
});
function addTestOutput(testName, testOutput, testExpected) {
var testResult = "Fail ❌";
if (testOutput == testExpected) { testResult = "Pass ✓"; }
document.getElementById('testResults').value += testName + " : " + testResult + "\n";
}
function popNetworkVars(saved) {
coinjs.pub = saved.pub;
coinjs.priv = saved.priv;
coinjs.multisig = saved.multisig;
}
function pushNetworkVars(network) {
var savedParams = {
'pub':coinjs.pub,
'priv':coinjs.priv,
'multisig':coinjs.multisig
};
if (network == "btc-mainnet") {
coinjs.pub = 0x00;
coinjs.priv = 0x80;
coinjs.multisig = 0x05;
}
if (network == "btc-testnet") {
coinjs.pub = 0x6f;
coinjs.priv = 0xef;
coinjs.multisig = 0xc4;
}
if (network == "ltc-mainnet") {
coinjs.pub = 0x30;
coinjs.priv = 0xb0;
coinjs.multisig = 0x32;
}
if (network == "ltc-testnet") {
coinjs.pub = 0x6f;
coinjs.priv = 0xef;
coinjs.multisig = 0x3a4;
}
if (network == "doge-mainnet") {
coinjs.pub = 0x1e;
coinjs.priv = 0x9e;
coinjs.multisig = 0x16;
}
return savedParams;
}
</script>
</html>