Compare commits
167 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cda4559cfd | ||
|
|
55196140f1 | ||
|
|
6fdbbae67b | ||
|
|
9a0175e18f | ||
|
|
507b44f719 | ||
|
|
c868cf984e | ||
|
|
b4fd55aebe | ||
|
|
f51be92a72 | ||
|
|
06cf50abb3 | ||
|
|
35de4228d8 | ||
|
|
a4ef169031 | ||
|
|
6bb5e3785a | ||
|
|
a199d3a55c | ||
|
|
7e92530e1a | ||
|
|
f5c2f48efc | ||
|
|
4f3ceeb3ea | ||
|
|
73369dd253 | ||
|
|
6ed0d3e07e | ||
|
|
84304f23ea | ||
|
|
44ba1b3d30 | ||
|
|
5583675390 | ||
|
|
56cb104ea4 | ||
|
|
c6f70d000e | ||
|
|
4836b20fae | ||
|
|
f364ae4b4a | ||
|
|
64cb387247 | ||
|
|
b2a86006cf | ||
|
|
b5ebaafed8 | ||
|
|
d4f47fce28 | ||
|
|
5bd3786f94 | ||
|
|
b77f3cf06a | ||
|
|
b0c6c3a516 | ||
|
|
a6f5dcf7f0 | ||
|
|
cf2a8b01cb | ||
|
|
261c4ace40 | ||
|
|
e18b634c4e | ||
|
|
1f3b878d63 | ||
|
|
efc16c10fb | ||
|
|
477ca8890d | ||
|
|
e73e8093b3 | ||
|
|
40ea3230fd | ||
|
|
dc416c6521 | ||
|
|
fc66bc9423 | ||
|
|
1c10bef510 | ||
|
|
b22e79391f | ||
|
|
0be8fd9a97 | ||
|
|
1a364ff770 | ||
|
|
bc0c72117e | ||
|
|
13c50cf4b6 | ||
|
|
dea1d1b274 | ||
|
|
e6c70d133b | ||
|
|
10aa011c6e | ||
|
|
c7a0fda7e5 | ||
|
|
c9cfeefc86 | ||
|
|
cdf4aa105b | ||
|
|
2fc574dde0 | ||
|
|
f088ec2e52 | ||
|
|
9ccd73808d | ||
|
|
cb81362330 | ||
|
|
fcbf25eaec | ||
|
|
2aca9ab28d | ||
|
|
5c581316fe | ||
|
|
ebfb940dd5 | ||
|
|
3201550d40 | ||
|
|
d88ec3db4b | ||
|
|
530453a701 | ||
|
|
194df37d56 | ||
|
|
87461b58b8 | ||
|
|
739aee3c0f | ||
|
|
fd81fafdff | ||
|
|
9bede2aef4 | ||
|
|
37f4395d9f | ||
|
|
5a65a77bd2 | ||
|
|
734e6b2eeb | ||
|
|
90a309d4b4 | ||
|
|
abd2191c50 | ||
|
|
bb8abb4ded | ||
|
|
40d514e0f0 | ||
|
|
c3b1a47199 | ||
|
|
ed7d5d6411 | ||
|
|
10e083bd89 | ||
|
|
56fa7b5139 | ||
|
|
e85276dd89 | ||
|
|
c843685662 | ||
|
|
64af126bc5 | ||
|
|
b997751791 | ||
|
|
9bccc5c512 | ||
|
|
217897285e | ||
|
|
b1603821da | ||
|
|
c2ef949dd0 | ||
|
|
ecb18acb0f | ||
|
|
4a4f302fe6 | ||
|
|
4afee020b0 | ||
|
|
2e0422656d | ||
|
|
6c480a1102 | ||
|
|
d5fe5ea828 | ||
|
|
52b206c7d6 | ||
|
|
1f9d9e97c2 | ||
|
|
d12b9d9072 | ||
|
|
6c22adaa5a | ||
|
|
605a6df343 | ||
|
|
60efbb5174 | ||
|
|
1b111b335d | ||
|
|
24028a001d | ||
|
|
f4c2b3d425 | ||
|
|
20547ff133 | ||
|
|
858774b640 | ||
|
|
21ecedaa48 | ||
|
|
3c1e957519 | ||
|
|
44e6f5c639 | ||
|
|
d176899774 | ||
|
|
970cd756ec | ||
|
|
b6dfa6b822 | ||
|
|
85c9267379 | ||
|
|
0c3530590f | ||
|
|
74a0fad4d2 | ||
|
|
67f9c1f926 | ||
|
|
67bd6e927c | ||
|
|
284c6361e7 | ||
|
|
347ccf4947 | ||
|
|
8ac9f4207d | ||
|
|
3ba79f0e3d | ||
|
|
cad1f6e98b | ||
|
|
e818fc738d | ||
|
|
0a94fb64ef | ||
|
|
e3fff74690 | ||
|
|
0154514309 | ||
|
|
1e8773c195 | ||
|
|
1ea47f6ff5 | ||
|
|
b943cbd6de | ||
|
|
53c48af90c | ||
|
|
6970a07d60 | ||
|
|
695947b02d | ||
|
|
0a8bb6f33a | ||
|
|
27c9bff17e | ||
|
|
c276998687 | ||
|
|
4f16149a26 | ||
|
|
7bfacd51b1 | ||
|
|
1da38e46f7 | ||
|
|
133a5d2858 | ||
|
|
a9cfa44c44 | ||
|
|
cedc6dddaf | ||
|
|
d53c236ec3 | ||
|
|
c8577e03be | ||
|
|
9a669885b3 | ||
|
|
8652fe789d | ||
|
|
6b39b86447 | ||
|
|
902370679f | ||
|
|
ab395a82f2 | ||
|
|
fe141b0b8a | ||
|
|
e33b2dc58e | ||
|
|
a62a822b71 | ||
|
|
91ee89282f | ||
|
|
42391aba8e | ||
|
|
8e0742d64c | ||
|
|
a1c3c60244 | ||
|
|
004de1f318 | ||
|
|
6f8cd22d5f | ||
|
|
cacc30cc95 | ||
|
|
d2f1d3a5d5 | ||
|
|
1c3e81bfd2 | ||
|
|
cf71efcf59 | ||
|
|
92de202ed0 | ||
|
|
6e821cf53a | ||
|
|
85ec366c6e | ||
|
|
717f5cc7ef | ||
|
|
da2d20f477 |
16
README.md
@ -1,9 +1,9 @@
|
||||
coinbin
|
||||
=======
|
||||
|
||||
A Open Source Browser Based Bitcoin Wallet. Version 1.2 beta by OutCast3k
|
||||
A Open Source Browser Based Bitcoin Wallet. Version 1.7 beta by OutCast3k
|
||||
|
||||
Live version available at http://coinb.in/ or http://4zpinp6gdkjfplhk.onion
|
||||
Live version available at http://coinb.in/ or coinbin3ravkwb24f7rmxx6w3snkjw45jhs5lxbh3yfeg3vpt6janwqd.onion
|
||||
|
||||
Github URL: https://github.com/OutCast3k/coinbin/
|
||||
|
||||
@ -24,7 +24,13 @@ 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
|
||||
- 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.
|
||||
|
||||
Donate to 1CWHWkTWaq1K5hevimJia3cyinQsrgXUvg to see more development!
|
||||
Donate to 33tht1bKDgZVxb39MnZsWa8oxHXHvUYE4G to see more development!
|
||||
|
||||
5
css/bootstrap-datetimepicker.min.css
vendored
Normal file
@ -3,6 +3,7 @@ html, body {
|
||||
}
|
||||
|
||||
body {
|
||||
background-image: url("../images/background.jpg");
|
||||
background-color:#ffffff;
|
||||
}
|
||||
|
||||
@ -24,3 +25,97 @@ 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;
|
||||
}
|
||||
|
||||
BIN
images/background.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
images/bitrefill16x.png
Normal file
|
After Width: | Height: | Size: 474 B |
BIN
images/btc32x.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
images/changelly16x.png
Normal file
|
After Width: | Height: | Size: 313 B |
BIN
images/coinbin.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
125
images/coinbin.svg
Normal file
@ -0,0 +1,125 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 8.8 KiB |
BIN
images/hodlhodl16x.png
Normal file
|
After Width: | Height: | Size: 724 B |
796
index.html
9
js/bootstrap-datetimepicker.min.js
vendored
Normal file
775
js/coin.js
1391
js/coinbin.js
211
js/collapse.js
Normal file
@ -0,0 +1,211 @@
|
||||
/* ========================================================================
|
||||
* 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
Normal file
59
js/transition.js
Normal file
@ -0,0 +1,59 @@
|
||||
/* ========================================================================
|
||||
* 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);
|
||||
40
sha1sum
@ -1,28 +1,40 @@
|
||||
---- Version 1.2 2015.07.23 ----
|
||||
e6810907c901e6bd34a28735a68850936f0823b8 ./js/ellipticcurve.js
|
||||
9ba5ede3d7f9d4c8fd623395f196adfdcf7e970f ./js/crypto-min.js
|
||||
---- Version 1.7 2021.10.23 ----
|
||||
77e4519962e2f6a9fc93342137dbb31c33b76b04 ./js/aes.js
|
||||
0ce26da5ef686d4ece91acd6cb6506559e11ab07 ./js/qcode-decoder.min.js
|
||||
be17ca7c834204bff711f582e41f76c06d472bac ./js/jsbn.js
|
||||
0700fc9ad2e39adeca0b50614bb3d327fb49f609 ./js/crypto-sha256.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
|
||||
e6810907c901e6bd34a28735a68850936f0823b8 ./js/ellipticcurve.js
|
||||
ae49e56999d82802727455f0ba83b63acd90a22b ./js/jquery-1.9.1.min.js
|
||||
be17ca7c834204bff711f582e41f76c06d472bac ./js/jsbn.js
|
||||
ce4fa351a2e62accf7fad77110fa4ddb09a324bf ./js/moment.min.js
|
||||
0ce26da5ef686d4ece91acd6cb6506559e11ab07 ./js/qcode-decoder.min.js
|
||||
ad038e1f39646b68ae666324ed4c2882a8c42474 ./js/qrcode.js
|
||||
64eb4ea5c882f8bce3e1885bf00728455f1c2f4c ./js/ripemd160.js
|
||||
114089ef2a3feb6d4db4f9cabcb186d7750d5884 ./js/sha512.js
|
||||
3ff26f7ca616b01742a25f9aa304bdb653ce4a4d ./js/coin.js
|
||||
cb26a4ae2216754f3089daaf7605e3ac41410126 ./js/coinbin.js
|
||||
ae49e56999d82802727455f0ba83b63acd90a22b ./js/jquery-1.9.1.min.js
|
||||
5f570018ed044eafd464f7e0ab1783b966224055 ./LICENCE
|
||||
506c40035e0d22560478629434d0fea27643b77a ./js/transition.js
|
||||
5f570018ed044eafd464f7e0ab1783b966224055 ./LICENSE
|
||||
255c58c17e63eb54adb3cd02b5c06224c67fc364 ./css/bootstrap-datetimepicker.min.css
|
||||
ed29315e0ffb3f14382431f2724235bf67f44eb3 ./css/bootstrap.min.css
|
||||
fc6b4268fbd57ad95d2b41a1d4d6866f222fbdb2 ./css/bootstrap-theme.min.css
|
||||
8297b8f4d686ec6c65981077514975e06ce41812 ./css/style.css
|
||||
8ac24915d59cef71c542e7cb7d7e153f560cba1f ./images/coinbin.gif
|
||||
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
|
||||
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
|
||||
fe8d57914bb036ab94e86ec35b2671eeb6d20d0d ./README.md
|
||||
f4803ce0396b7e65d2f9dd4a5ae232b32403ef19 ./index.html
|
||||
283e5a5aa0999fb8e84bdc7a0f2a881db249baf1 ./README.md
|
||||
57749e14fea7e159c56b6dda9e982aef99985861 ./index.html
|
||||
7130b64e3ef4cf6f2f1550e902f081c58dc053de ./test.html
|
||||
|
||||
379
test.html
Normal file
@ -0,0 +1,379 @@
|
||||
<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>
|
||||