mirror of
https://github.com/ok2/coinbin.git
synced 2026-04-18 08:44:03 +02:00
Compare commits
161 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c8ee40a9a | ||
|
|
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 | ||
|
|
da2d20f477 |
14
README.md
14
README.md
@ -1,7 +1,7 @@
|
||||
coinbin
|
||||
=======
|
||||
|
||||
A Open Source Browser Based Bitcoin Wallet. Version 1.2 beta by OutCast3k
|
||||
A Open Source Browser Based Bitcoin Wallet. Version 1.6 beta by OutCast3k
|
||||
|
||||
Live version available at http://coinb.in/ or http://4zpinp6gdkjfplhk.onion
|
||||
|
||||
@ -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
5
css/bootstrap-datetimepicker.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -24,3 +24,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/btc32x.png
Normal file
BIN
images/btc32x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
773
index.html
773
index.html
File diff suppressed because it is too large
Load Diff
9
js/bootstrap-datetimepicker.min.js
vendored
Normal file
9
js/bootstrap-datetimepicker.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
781
js/coin.js
781
js/coin.js
File diff suppressed because it is too large
Load Diff
1450
js/coinbin.js
1450
js/coinbin.js
File diff suppressed because it is too large
Load Diff
211
js/collapse.js
Normal file
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
7
js/moment.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
59
js/transition.js
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);
|
||||
33
sha1sum
33
sha1sum
@ -1,22 +1,28 @@
|
||||
---- Version 1.2 2015.07.23 ----
|
||||
e6810907c901e6bd34a28735a68850936f0823b8 ./js/ellipticcurve.js
|
||||
9ba5ede3d7f9d4c8fd623395f196adfdcf7e970f ./js/crypto-min.js
|
||||
---- Version 1.6 2020.10.02 ----
|
||||
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
|
||||
cb5717166bf1c99abbd75a06013067c4a5897d5a ./js/coinbin.js
|
||||
911fb7bdba24269029f27659e4040cd991b2307c ./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
|
||||
3d054bbad57fca0c091c8099a25e3cc802cf35c1 ./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
|
||||
eb54f374256b75a17f274847b4ca9985fd046f9f ./css/style.css
|
||||
2e3217a3f3b7c2fb30562ab9a4ef9a407ae81897 ./images/btc32x.png
|
||||
8ac24915d59cef71c542e7cb7d7e153f560cba1f ./images/coinbin.gif
|
||||
f2af060f1cadbc9065c8c465c648dc01be67cc12 ./images/loader.gif
|
||||
86b6f62b7853e67d3e635f6512a5a5efc58ea3c3 ./fonts/glyphicons-halflings-regular.eot
|
||||
@ -24,5 +30,6 @@ ca35b697d99cae4d1b60f2d60fcd37771987eb07 ./fonts/glyphicons-halflings-regular.w
|
||||
de51a8494180a6db074af2dee2383f0a363c5b08 ./fonts/glyphicons-halflings-regular.svg
|
||||
278e49a86e634da6f2a02f3b47dd9d2a8f26210f ./fonts/glyphicons-halflings-regular.woff
|
||||
44bc1850f570972267b169ae18f1cb06b611ffa2 ./fonts/glyphicons-halflings-regular.ttf
|
||||
fe8d57914bb036ab94e86ec35b2671eeb6d20d0d ./README.md
|
||||
528c2fd42260033391105215401bf122e3304f7b ./index.html
|
||||
ee481606d8d48f402d152fa632ba9e5f9da7f169 ./README.md
|
||||
a706e95f6436ee4a31dc26b17a9ac8ab1f0d3750 ./index.html
|
||||
7130b64e3ef4cf6f2f1550e902f081c58dc053de ./test.html
|
||||
|
||||
379
test.html
Normal file
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>
|
||||
Loading…
x
Reference in New Issue
Block a user