@exodus/bitcoinjs-lib-forks 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/LICENSE +21 -0
  3. package/README.md +207 -0
  4. package/package.json +67 -0
  5. package/src/address.js +97 -0
  6. package/src/block.js +177 -0
  7. package/src/bufferutils.js +56 -0
  8. package/src/crypto.js +29 -0
  9. package/src/ecdsa.js +161 -0
  10. package/src/ecpair.js +131 -0
  11. package/src/ecsignature.js +97 -0
  12. package/src/hdnode.js +316 -0
  13. package/src/index.js +23 -0
  14. package/src/networks.js +47 -0
  15. package/src/script.js +214 -0
  16. package/src/script_number.js +68 -0
  17. package/src/templates/index.js +74 -0
  18. package/src/templates/multisig/index.js +4 -0
  19. package/src/templates/multisig/input.js +71 -0
  20. package/src/templates/multisig/output.js +64 -0
  21. package/src/templates/nulldata.js +34 -0
  22. package/src/templates/pubkey/index.js +4 -0
  23. package/src/templates/pubkey/input.js +39 -0
  24. package/src/templates/pubkey/output.js +33 -0
  25. package/src/templates/pubkeyhash/index.js +4 -0
  26. package/src/templates/pubkeyhash/input.js +51 -0
  27. package/src/templates/pubkeyhash/output.js +42 -0
  28. package/src/templates/scripthash/index.js +4 -0
  29. package/src/templates/scripthash/input.js +84 -0
  30. package/src/templates/scripthash/output.js +34 -0
  31. package/src/templates/witnesscommitment/index.js +3 -0
  32. package/src/templates/witnesscommitment/output.js +42 -0
  33. package/src/templates/witnesspubkeyhash/index.js +4 -0
  34. package/src/templates/witnesspubkeyhash/input.js +44 -0
  35. package/src/templates/witnesspubkeyhash/output.js +33 -0
  36. package/src/templates/witnessscripthash/index.js +4 -0
  37. package/src/templates/witnessscripthash/input.js +63 -0
  38. package/src/templates/witnessscripthash/output.js +33 -0
  39. package/src/transaction.js +547 -0
  40. package/src/transaction_builder.js +825 -0
  41. package/src/types.js +53 -0
@@ -0,0 +1,51 @@
1
+ // {signature} {pubKey}
2
+
3
+ var bscript = require('../../script')
4
+ var typeforce = require('typeforce')
5
+
6
+ function check (script) {
7
+ var chunks = bscript.decompile(script)
8
+
9
+ return chunks.length === 2 &&
10
+ bscript.isCanonicalSignature(chunks[0]) &&
11
+ bscript.isCanonicalPubKey(chunks[1])
12
+ }
13
+ check.toJSON = function () { return 'pubKeyHash input' }
14
+
15
+ function encodeStack (signature, pubKey) {
16
+ typeforce({
17
+ signature: bscript.isCanonicalSignature,
18
+ pubKey: bscript.isCanonicalPubKey
19
+ }, {
20
+ signature: signature,
21
+ pubKey: pubKey
22
+ })
23
+
24
+ return [signature, pubKey]
25
+ }
26
+
27
+ function encode (signature, pubKey) {
28
+ return bscript.compile(encodeStack(signature, pubKey))
29
+ }
30
+
31
+ function decodeStack (stack) {
32
+ typeforce(check, stack)
33
+
34
+ return {
35
+ signature: stack[0],
36
+ pubKey: stack[1]
37
+ }
38
+ }
39
+
40
+ function decode (buffer) {
41
+ var stack = bscript.decompile(buffer)
42
+ return decodeStack(stack)
43
+ }
44
+
45
+ module.exports = {
46
+ check: check,
47
+ decode: decode,
48
+ decodeStack: decodeStack,
49
+ encode: encode,
50
+ encodeStack: encodeStack
51
+ }
@@ -0,0 +1,42 @@
1
+ // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
2
+
3
+ var bscript = require('../../script')
4
+ var types = require('../../types')
5
+ var typeforce = require('typeforce')
6
+ var OPS = require('bitcoin-ops')
7
+
8
+ function check (script) {
9
+ var buffer = bscript.compile(script)
10
+
11
+ return buffer.length === 25 &&
12
+ buffer[0] === OPS.OP_DUP &&
13
+ buffer[1] === OPS.OP_HASH160 &&
14
+ buffer[2] === 0x14 &&
15
+ buffer[23] === OPS.OP_EQUALVERIFY &&
16
+ buffer[24] === OPS.OP_CHECKSIG
17
+ }
18
+ check.toJSON = function () { return 'pubKeyHash output' }
19
+
20
+ function encode (pubKeyHash) {
21
+ typeforce(types.Hash160bit, pubKeyHash)
22
+
23
+ return bscript.compile([
24
+ OPS.OP_DUP,
25
+ OPS.OP_HASH160,
26
+ pubKeyHash,
27
+ OPS.OP_EQUALVERIFY,
28
+ OPS.OP_CHECKSIG
29
+ ])
30
+ }
31
+
32
+ function decode (buffer) {
33
+ typeforce(check, buffer)
34
+
35
+ return buffer.slice(3, 23)
36
+ }
37
+
38
+ module.exports = {
39
+ check: check,
40
+ decode: decode,
41
+ encode: encode
42
+ }
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ input: require('./input'),
3
+ output: require('./output')
4
+ }
@@ -0,0 +1,84 @@
1
+ // <scriptSig> {serialized scriptPubKey script}
2
+
3
+ var Buffer = require('safe-buffer').Buffer
4
+ var bscript = require('../../script')
5
+ var typeforce = require('typeforce')
6
+
7
+ var p2ms = require('../multisig/')
8
+ var p2pk = require('../pubkey/')
9
+ var p2pkh = require('../pubkeyhash/')
10
+ var p2wpkho = require('../witnesspubkeyhash/output')
11
+ var p2wsho = require('../witnessscripthash/output')
12
+
13
+ function check (script, allowIncomplete) {
14
+ var chunks = bscript.decompile(script)
15
+ if (chunks.length < 1) return false
16
+
17
+ var lastChunk = chunks[chunks.length - 1]
18
+ if (!Buffer.isBuffer(lastChunk)) return false
19
+
20
+ var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
21
+ var redeemScriptChunks = bscript.decompile(lastChunk)
22
+
23
+ // is redeemScript a valid script?
24
+ if (redeemScriptChunks.length === 0) return false
25
+
26
+ // is redeemScriptSig push only?
27
+ if (!bscript.isPushOnly(scriptSigChunks)) return false
28
+
29
+ // is witness?
30
+ if (chunks.length === 1) {
31
+ return p2wsho.check(redeemScriptChunks) ||
32
+ p2wpkho.check(redeemScriptChunks)
33
+ }
34
+
35
+ // match types
36
+ if (p2pkh.input.check(scriptSigChunks) &&
37
+ p2pkh.output.check(redeemScriptChunks)) return true
38
+
39
+ if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
40
+ p2ms.output.check(redeemScriptChunks)) return true
41
+
42
+ if (p2pk.input.check(scriptSigChunks) &&
43
+ p2pk.output.check(redeemScriptChunks)) return true
44
+
45
+ return false
46
+ }
47
+ check.toJSON = function () { return 'scriptHash input' }
48
+
49
+ function encodeStack (redeemScriptStack, redeemScript) {
50
+ var serializedScriptPubKey = bscript.compile(redeemScript)
51
+
52
+ return [].concat(redeemScriptStack, serializedScriptPubKey)
53
+ }
54
+
55
+ function encode (redeemScriptSig, redeemScript) {
56
+ var redeemScriptStack = bscript.decompile(redeemScriptSig)
57
+
58
+ return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
59
+ }
60
+
61
+ function decodeStack (stack) {
62
+ typeforce(check, stack)
63
+
64
+ return {
65
+ redeemScriptStack: stack.slice(0, -1),
66
+ redeemScript: stack[stack.length - 1]
67
+ }
68
+ }
69
+
70
+ function decode (buffer) {
71
+ var stack = bscript.decompile(buffer)
72
+ var result = decodeStack(stack)
73
+ result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
74
+ delete result.redeemScriptStack
75
+ return result
76
+ }
77
+
78
+ module.exports = {
79
+ check: check,
80
+ decode: decode,
81
+ decodeStack: decodeStack,
82
+ encode: encode,
83
+ encodeStack: encodeStack
84
+ }
@@ -0,0 +1,34 @@
1
+ // OP_HASH160 {scriptHash} OP_EQUAL
2
+
3
+ var bscript = require('../../script')
4
+ var types = require('../../types')
5
+ var typeforce = require('typeforce')
6
+ var OPS = require('bitcoin-ops')
7
+
8
+ function check (script) {
9
+ var buffer = bscript.compile(script)
10
+
11
+ return buffer.length === 23 &&
12
+ buffer[0] === OPS.OP_HASH160 &&
13
+ buffer[1] === 0x14 &&
14
+ buffer[22] === OPS.OP_EQUAL
15
+ }
16
+ check.toJSON = function () { return 'scriptHash output' }
17
+
18
+ function encode (scriptHash) {
19
+ typeforce(types.Hash160bit, scriptHash)
20
+
21
+ return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
22
+ }
23
+
24
+ function decode (buffer) {
25
+ typeforce(check, buffer)
26
+
27
+ return buffer.slice(2, 22)
28
+ }
29
+
30
+ module.exports = {
31
+ check: check,
32
+ decode: decode,
33
+ encode: encode
34
+ }
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ output: require('./output')
3
+ }
@@ -0,0 +1,42 @@
1
+ // OP_RETURN {aa21a9ed} {commitment}
2
+
3
+ var Buffer = require('safe-buffer').Buffer
4
+ var bscript = require('../../script')
5
+ var types = require('../../types')
6
+ var typeforce = require('typeforce')
7
+ var OPS = require('bitcoin-ops')
8
+
9
+ var HEADER = Buffer.from('aa21a9ed', 'hex')
10
+
11
+ function check (script) {
12
+ var buffer = bscript.compile(script)
13
+
14
+ return buffer.length > 37 &&
15
+ buffer[0] === OPS.OP_RETURN &&
16
+ buffer[1] === 0x24 &&
17
+ buffer.slice(2, 6).equals(HEADER)
18
+ }
19
+
20
+ check.toJSON = function () { return 'Witness commitment output' }
21
+
22
+ function encode (commitment) {
23
+ typeforce(types.Hash256bit, commitment)
24
+
25
+ var buffer = Buffer.allocUnsafe(36)
26
+ HEADER.copy(buffer, 0)
27
+ commitment.copy(buffer, 4)
28
+
29
+ return bscript.compile([OPS.OP_RETURN, buffer])
30
+ }
31
+
32
+ function decode (buffer) {
33
+ typeforce(check, buffer)
34
+
35
+ return bscript.decompile(buffer)[1].slice(4, 36)
36
+ }
37
+
38
+ module.exports = {
39
+ check: check,
40
+ decode: decode,
41
+ encode: encode
42
+ }
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ input: require('./input'),
3
+ output: require('./output')
4
+ }
@@ -0,0 +1,44 @@
1
+ // {signature} {pubKey}
2
+
3
+ var bscript = require('../../script')
4
+ var typeforce = require('typeforce')
5
+
6
+ function isCompressedCanonicalPubKey (pubKey) {
7
+ return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
8
+ }
9
+
10
+ function check (script) {
11
+ var chunks = bscript.decompile(script)
12
+
13
+ return chunks.length === 2 &&
14
+ bscript.isCanonicalSignature(chunks[0]) &&
15
+ isCompressedCanonicalPubKey(chunks[1])
16
+ }
17
+ check.toJSON = function () { return 'witnessPubKeyHash input' }
18
+
19
+ function encodeStack (signature, pubKey) {
20
+ typeforce({
21
+ signature: bscript.isCanonicalSignature,
22
+ pubKey: isCompressedCanonicalPubKey
23
+ }, {
24
+ signature: signature,
25
+ pubKey: pubKey
26
+ })
27
+
28
+ return [signature, pubKey]
29
+ }
30
+
31
+ function decodeStack (stack) {
32
+ typeforce(check, stack)
33
+
34
+ return {
35
+ signature: stack[0],
36
+ pubKey: stack[1]
37
+ }
38
+ }
39
+
40
+ module.exports = {
41
+ check: check,
42
+ decodeStack: decodeStack,
43
+ encodeStack: encodeStack
44
+ }
@@ -0,0 +1,33 @@
1
+ // OP_0 {pubKeyHash}
2
+
3
+ var bscript = require('../../script')
4
+ var types = require('../../types')
5
+ var typeforce = require('typeforce')
6
+ var OPS = require('bitcoin-ops')
7
+
8
+ function check (script) {
9
+ var buffer = bscript.compile(script)
10
+
11
+ return buffer.length === 22 &&
12
+ buffer[0] === OPS.OP_0 &&
13
+ buffer[1] === 0x14
14
+ }
15
+ check.toJSON = function () { return 'Witness pubKeyHash output' }
16
+
17
+ function encode (pubKeyHash) {
18
+ typeforce(types.Hash160bit, pubKeyHash)
19
+
20
+ return bscript.compile([OPS.OP_0, pubKeyHash])
21
+ }
22
+
23
+ function decode (buffer) {
24
+ typeforce(check, buffer)
25
+
26
+ return buffer.slice(2)
27
+ }
28
+
29
+ module.exports = {
30
+ check: check,
31
+ decode: decode,
32
+ encode: encode
33
+ }
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ input: require('./input'),
3
+ output: require('./output')
4
+ }
@@ -0,0 +1,63 @@
1
+ // <scriptSig> {serialized scriptPubKey script}
2
+
3
+ var bscript = require('../../script')
4
+ var types = require('../../types')
5
+ var typeforce = require('typeforce')
6
+
7
+ var p2ms = require('../multisig/')
8
+ var p2pk = require('../pubkey/')
9
+ var p2pkh = require('../pubkeyhash/')
10
+
11
+ function check (chunks, allowIncomplete) {
12
+ typeforce(types.Array, chunks)
13
+ if (chunks.length < 1) return false
14
+
15
+ var witnessScript = chunks[chunks.length - 1]
16
+ if (!Buffer.isBuffer(witnessScript)) return false
17
+
18
+ var witnessScriptChunks = bscript.decompile(witnessScript)
19
+
20
+ // is witnessScript a valid script?
21
+ if (witnessScriptChunks.length === 0) return false
22
+
23
+ var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
24
+
25
+ // match types
26
+ if (p2pkh.input.check(witnessRawScriptSig) &&
27
+ p2pkh.output.check(witnessScriptChunks)) return true
28
+
29
+ if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
30
+ p2ms.output.check(witnessScriptChunks)) return true
31
+
32
+ if (p2pk.input.check(witnessRawScriptSig) &&
33
+ p2pk.output.check(witnessScriptChunks)) return true
34
+
35
+ return false
36
+ }
37
+ check.toJSON = function () { return 'witnessScriptHash input' }
38
+
39
+ function encodeStack (witnessData, witnessScript) {
40
+ typeforce({
41
+ witnessData: [types.Buffer],
42
+ witnessScript: types.Buffer
43
+ }, {
44
+ witnessData: witnessData,
45
+ witnessScript: witnessScript
46
+ })
47
+
48
+ return [].concat(witnessData, witnessScript)
49
+ }
50
+
51
+ function decodeStack (chunks) {
52
+ typeforce(check, chunks)
53
+ return {
54
+ witnessData: chunks.slice(0, -1),
55
+ witnessScript: chunks[chunks.length - 1]
56
+ }
57
+ }
58
+
59
+ module.exports = {
60
+ check: check,
61
+ decodeStack: decodeStack,
62
+ encodeStack: encodeStack
63
+ }
@@ -0,0 +1,33 @@
1
+ // OP_0 {scriptHash}
2
+
3
+ var bscript = require('../../script')
4
+ var types = require('../../types')
5
+ var typeforce = require('typeforce')
6
+ var OPS = require('bitcoin-ops')
7
+
8
+ function check (script) {
9
+ var buffer = bscript.compile(script)
10
+
11
+ return buffer.length === 34 &&
12
+ buffer[0] === OPS.OP_0 &&
13
+ buffer[1] === 0x20
14
+ }
15
+ check.toJSON = function () { return 'Witness scriptHash output' }
16
+
17
+ function encode (scriptHash) {
18
+ typeforce(types.Hash256bit, scriptHash)
19
+
20
+ return bscript.compile([OPS.OP_0, scriptHash])
21
+ }
22
+
23
+ function decode (buffer) {
24
+ typeforce(check, buffer)
25
+
26
+ return buffer.slice(2)
27
+ }
28
+
29
+ module.exports = {
30
+ check: check,
31
+ decode: decode,
32
+ encode: encode
33
+ }