@bsv/sdk 1.0.0 → 1.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.
- package/README.md +25 -3
- package/package.json +9 -5
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
- package/.github/ISSUE_TEMPLATE/discussion.md +0 -24
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -23
- package/CHANGELOG.md +0 -72
- package/CONTRIBUTING.md +0 -85
- package/ROADMAP.md +0 -3
- package/docs/getting-started/COMMONJS.md +0 -94
- package/docs/getting-started/REACT-TS.md +0 -131
- package/docs/getting-started/TS-NODE.md +0 -106
- package/docs/getting-started/VUE.md +0 -103
- package/jest.config.js +0 -6
- package/mod.ts +0 -8
- package/src/compat/BSM.ts +0 -51
- package/src/compat/ECIES.ts +0 -557
- package/src/compat/HD.ts +0 -348
- package/src/compat/Mnemonic.ts +0 -295
- package/src/compat/__tests/BSM.test.ts +0 -38
- package/src/compat/__tests/ECIES.test.ts +0 -90
- package/src/compat/__tests/HD.test.ts +0 -405
- package/src/compat/__tests/Mnemonic.test.ts +0 -177
- package/src/compat/__tests/Mnemonic.vectors.ts +0 -172
- package/src/compat/bip-39-wordlist-en.ts +0 -2053
- package/src/compat/index.ts +0 -4
- package/src/messages/EncryptedMessage.ts +0 -70
- package/src/messages/SignedMessage.ts +0 -87
- package/src/messages/__tests/EncryptedMessage.test.ts +0 -36
- package/src/messages/__tests/SignedMessage.test.ts +0 -53
- package/src/messages/index.ts +0 -2
- package/src/primitives/AESGCM.ts +0 -479
- package/src/primitives/BasePoint.ts +0 -21
- package/src/primitives/BigNumber.ts +0 -4619
- package/src/primitives/Curve.ts +0 -1163
- package/src/primitives/DRBG.ts +0 -102
- package/src/primitives/ECDSA.ts +0 -164
- package/src/primitives/Hash.ts +0 -1420
- package/src/primitives/JacobianPoint.ts +0 -410
- package/src/primitives/K256.ts +0 -116
- package/src/primitives/Mersenne.ts +0 -123
- package/src/primitives/MontgomoryMethod.ts +0 -160
- package/src/primitives/Point.ts +0 -852
- package/src/primitives/PrivateKey.ts +0 -195
- package/src/primitives/PublicKey.ts +0 -154
- package/src/primitives/Random.ts +0 -55
- package/src/primitives/ReductionContext.ts +0 -528
- package/src/primitives/Signature.ts +0 -235
- package/src/primitives/SymmetricKey.ts +0 -75
- package/src/primitives/TransactionSignature.ts +0 -189
- package/src/primitives/__tests/AESGCM.test.ts +0 -338
- package/src/primitives/__tests/BRC42.private.vectors.ts +0 -33
- package/src/primitives/__tests/BRC42.public.vectors.ts +0 -33
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +0 -572
- package/src/primitives/__tests/BigNumber.binary.test.ts +0 -203
- package/src/primitives/__tests/BigNumber.constructor.test.ts +0 -176
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +0 -18
- package/src/primitives/__tests/BigNumber.fixtures.ts +0 -264
- package/src/primitives/__tests/BigNumber.serializers.test.ts +0 -157
- package/src/primitives/__tests/BigNumber.utils.test.ts +0 -347
- package/src/primitives/__tests/Curve.unit.test.ts +0 -192
- package/src/primitives/__tests/DRBG.test.ts +0 -18
- package/src/primitives/__tests/DRBG.vectors.ts +0 -167
- package/src/primitives/__tests/ECDH.test.ts +0 -31
- package/src/primitives/__tests/ECDSA.test.ts +0 -58
- package/src/primitives/__tests/HMAC.test.ts +0 -59
- package/src/primitives/__tests/Hash.test.ts +0 -121
- package/src/primitives/__tests/PBKDF2.vectors.ts +0 -119
- package/src/primitives/__tests/PrivateKey.test.ts +0 -17
- package/src/primitives/__tests/PublicKey.test.ts +0 -66
- package/src/primitives/__tests/Random.test.ts +0 -14
- package/src/primitives/__tests/Reader.test.ts +0 -296
- package/src/primitives/__tests/ReductionContext.test.ts +0 -279
- package/src/primitives/__tests/SymmetricKey.test.ts +0 -58
- package/src/primitives/__tests/SymmetricKey.vectors.ts +0 -40
- package/src/primitives/__tests/Writer.test.ts +0 -198
- package/src/primitives/__tests/sighash.vectors.ts +0 -3503
- package/src/primitives/__tests/utils.test.ts +0 -108
- package/src/primitives/index.ts +0 -8
- package/src/primitives/utils.ts +0 -665
- package/src/script/LockingScript.ts +0 -30
- package/src/script/OP.ts +0 -219
- package/src/script/Script.ts +0 -426
- package/src/script/ScriptChunk.ts +0 -7
- package/src/script/ScriptTemplate.ts +0 -36
- package/src/script/Spend.ts +0 -1379
- package/src/script/UnlockingScript.ts +0 -30
- package/src/script/__tests/Script.test.ts +0 -369
- package/src/script/__tests/Spend.test.ts +0 -248
- package/src/script/__tests/script.invalid.vectors.ts +0 -925
- package/src/script/__tests/script.valid.vectors.ts +0 -1120
- package/src/script/__tests/scriptFromVector.ts +0 -42
- package/src/script/__tests/spend.valid.vectors.ts +0 -2288
- package/src/script/index.ts +0 -7
- package/src/script/templates/P2PKH.ts +0 -109
- package/src/script/templates/RPuzzle.ts +0 -140
- package/src/script/templates/index.ts +0 -2
- package/src/transaction/Broadcaster.ts +0 -42
- package/src/transaction/ChainTracker.ts +0 -22
- package/src/transaction/FeeModel.ts +0 -13
- package/src/transaction/MerklePath.ts +0 -259
- package/src/transaction/Transaction.ts +0 -602
- package/src/transaction/TransactionInput.ts +0 -63
- package/src/transaction/TransactionOutput.ts +0 -37
- package/src/transaction/__tests/MerklePath.test.ts +0 -181
- package/src/transaction/__tests/Transaction.test.ts +0 -413
- package/src/transaction/__tests/bigtx.vectors.ts +0 -4
- package/src/transaction/__tests/bump.invalid.vectors.ts +0 -8
- package/src/transaction/__tests/bump.valid.vectors.ts +0 -4
- package/src/transaction/__tests/tx.invalid.vectors.ts +0 -281
- package/src/transaction/__tests/tx.valid.vectors.ts +0 -364
- package/src/transaction/broadcasters/ARC.ts +0 -106
- package/src/transaction/broadcasters/__tests/ARC.test.ts +0 -115
- package/src/transaction/broadcasters/index.ts +0 -1
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +0 -71
- package/src/transaction/fee-models/index.ts +0 -1
- package/src/transaction/index.ts +0 -6
- package/ts2md.json +0 -5
- package/tsconfig.base.json +0 -26
- package/tsconfig.cjs.json +0 -11
- package/tsconfig.eslint.json +0 -12
- package/tsconfig.esm.json +0 -9
- package/tsconfig.json +0 -17
- package/tsconfig.types.json +0 -11
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import ARC from '../../../../dist/cjs/src/transaction/broadcasters/ARC.js'
|
|
2
|
-
import Transaction from '../../../../dist/cjs/src/transaction/Transaction.js'
|
|
3
|
-
|
|
4
|
-
// Mock Transaction
|
|
5
|
-
jest.mock('../../Transaction', () => {
|
|
6
|
-
return {
|
|
7
|
-
default: jest.fn().mockImplementation(() => {
|
|
8
|
-
return {
|
|
9
|
-
toHex: () => 'mocked_transaction_hex'
|
|
10
|
-
}
|
|
11
|
-
})
|
|
12
|
-
}
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
describe('ARC Broadcaster', () => {
|
|
16
|
-
const URL = 'https://example.com'
|
|
17
|
-
const apiKey = 'test_api_key'
|
|
18
|
-
let broadcaster: ARC
|
|
19
|
-
let transaction: Transaction
|
|
20
|
-
|
|
21
|
-
beforeEach(() => {
|
|
22
|
-
broadcaster = new ARC(URL, apiKey)
|
|
23
|
-
transaction = new Transaction()
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
it('should broadcast successfully using window.fetch', async () => {
|
|
27
|
-
// Mocking window.fetch
|
|
28
|
-
const mockFetch = jest.fn().mockResolvedValue({
|
|
29
|
-
ok: true,
|
|
30
|
-
json: async () => await Promise.resolve({
|
|
31
|
-
txid: 'mocked_txid',
|
|
32
|
-
txStatus: 'success',
|
|
33
|
-
extraInfo: 'received'
|
|
34
|
-
})
|
|
35
|
-
})
|
|
36
|
-
global.window = { fetch: mockFetch } as any
|
|
37
|
-
|
|
38
|
-
const response = await broadcaster.broadcast(transaction)
|
|
39
|
-
|
|
40
|
-
expect(mockFetch).toHaveBeenCalled()
|
|
41
|
-
expect(response).toEqual({
|
|
42
|
-
status: 'success',
|
|
43
|
-
txid: 'mocked_txid',
|
|
44
|
-
message: 'success received'
|
|
45
|
-
})
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
it('should broadcast successfully using Node.js https', async () => {
|
|
49
|
-
// Mocking Node.js https module
|
|
50
|
-
jest.mock('https', () => ({
|
|
51
|
-
request: (url, options, callback) => {
|
|
52
|
-
// eslint-disable-next-line
|
|
53
|
-
callback({
|
|
54
|
-
statusCode: 200,
|
|
55
|
-
on: (event, handler) => {
|
|
56
|
-
if (event === 'data') handler(JSON.stringify({
|
|
57
|
-
txid: 'mocked_txid',
|
|
58
|
-
txStatus: 'success',
|
|
59
|
-
extraInfo: 'received'
|
|
60
|
-
}))
|
|
61
|
-
if (event === 'end') handler()
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
return {
|
|
65
|
-
on: jest.fn(),
|
|
66
|
-
write: jest.fn(),
|
|
67
|
-
end: jest.fn()
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}))
|
|
71
|
-
|
|
72
|
-
delete global.window
|
|
73
|
-
const response = await broadcaster.broadcast(transaction)
|
|
74
|
-
|
|
75
|
-
expect(response).toEqual({
|
|
76
|
-
status: 'success',
|
|
77
|
-
txid: 'mocked_txid',
|
|
78
|
-
message: 'success received'
|
|
79
|
-
})
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
it('should handle network errors', async () => {
|
|
83
|
-
const mockFetch = jest.fn().mockRejectedValue(new Error('Network error'))
|
|
84
|
-
global.window = { fetch: mockFetch } as any
|
|
85
|
-
|
|
86
|
-
const response = await broadcaster.broadcast(transaction)
|
|
87
|
-
|
|
88
|
-
expect(mockFetch).toHaveBeenCalled()
|
|
89
|
-
expect(response).toEqual({
|
|
90
|
-
status: 'error',
|
|
91
|
-
code: '500',
|
|
92
|
-
description: 'Network error'
|
|
93
|
-
})
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
it('should handle non-200 responses', async () => {
|
|
97
|
-
const mockFetch = jest.fn().mockResolvedValue({
|
|
98
|
-
ok: false,
|
|
99
|
-
json: async () => await Promise.resolve({
|
|
100
|
-
status: '400',
|
|
101
|
-
detail: 'Bad request'
|
|
102
|
-
})
|
|
103
|
-
})
|
|
104
|
-
global.window = { fetch: mockFetch } as any
|
|
105
|
-
|
|
106
|
-
const response = await broadcaster.broadcast(transaction)
|
|
107
|
-
|
|
108
|
-
expect(mockFetch).toHaveBeenCalled()
|
|
109
|
-
expect(response).toEqual({
|
|
110
|
-
status: 'error',
|
|
111
|
-
code: '400',
|
|
112
|
-
description: 'Bad request'
|
|
113
|
-
})
|
|
114
|
-
})
|
|
115
|
-
})
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as ARC } from './ARC.js'
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import FeeModel from '../FeeModel.js'
|
|
2
|
-
import Transaction from '../Transaction.js'
|
|
3
|
-
import BigNumber from '../../primitives/BigNumber.js'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Represents the "satoshis per kilobyte" transaction fee model.
|
|
7
|
-
*/
|
|
8
|
-
export default class SatoshisPerKilobyte implements FeeModel {
|
|
9
|
-
/**
|
|
10
|
-
* @property
|
|
11
|
-
* Denotes the number of satoshis paid per kilobyte of transaction size.
|
|
12
|
-
*/
|
|
13
|
-
value: number
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Constructs an instance of the sat/kb fee model.
|
|
17
|
-
*
|
|
18
|
-
* @param {number} value - The number of satoshis per kilobyte to charge as a fee.
|
|
19
|
-
*/
|
|
20
|
-
constructor(value: number) {
|
|
21
|
-
this.value = value
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Computes the fee for a given transaction.
|
|
26
|
-
*
|
|
27
|
-
* @param tx The transaction for which a fee is to be computed.
|
|
28
|
-
* @returns The fee in satoshis for the transaction, as a BigNumber.
|
|
29
|
-
*/
|
|
30
|
-
async computeFee(tx: Transaction): Promise<number> {
|
|
31
|
-
const getVarIntSize = (i: number): number => {
|
|
32
|
-
if (i > 2 ** 32) {
|
|
33
|
-
return 9
|
|
34
|
-
} else if (i > 2 ** 16) {
|
|
35
|
-
return 5
|
|
36
|
-
} else if (i > 253) {
|
|
37
|
-
return 3
|
|
38
|
-
} else {
|
|
39
|
-
return 1
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// Compute the (potentially estimated) size of the transaction
|
|
43
|
-
let size = 4 // version
|
|
44
|
-
size += getVarIntSize(tx.inputs.length) // number of inputs
|
|
45
|
-
for (let i = 0; i < tx.inputs.length; i++) {
|
|
46
|
-
const input = tx.inputs[i]
|
|
47
|
-
size += 40 // txid, output index, sequence number
|
|
48
|
-
let scriptLength: number
|
|
49
|
-
if (typeof input.unlockingScript === 'object') {
|
|
50
|
-
scriptLength = input.unlockingScript.toBinary().length
|
|
51
|
-
} else if (typeof input.unlockingScriptTemplate === 'object') {
|
|
52
|
-
scriptLength = await input.unlockingScriptTemplate.estimateLength(tx, i)
|
|
53
|
-
} else {
|
|
54
|
-
throw new Error('All inputs must have an unlocking script or an unlocking script template for sat/kb fee computation.')
|
|
55
|
-
}
|
|
56
|
-
size += getVarIntSize(scriptLength) // unlocking script length
|
|
57
|
-
size += scriptLength // unlocking script
|
|
58
|
-
}
|
|
59
|
-
size += getVarIntSize(tx.outputs.length) // number of outputs
|
|
60
|
-
for (const out of tx.outputs) {
|
|
61
|
-
size += 8 // satoshis
|
|
62
|
-
const length = out.lockingScript.toBinary().length
|
|
63
|
-
size += getVarIntSize(length) // script length
|
|
64
|
-
size += length // script
|
|
65
|
-
}
|
|
66
|
-
size += 4 // lock time
|
|
67
|
-
// We'll use Math.ceil to ensure the miners get the extra satoshi.
|
|
68
|
-
const fee = Math.ceil((size / 1000) * this.value)
|
|
69
|
-
return fee
|
|
70
|
-
}
|
|
71
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as SatoshisPerKilobyte } from './SatoshisPerKilobyte.js'
|
package/src/transaction/index.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { default as Transaction } from './Transaction.js'
|
|
2
|
-
export { default as MerklePath } from './MerklePath.js'
|
|
3
|
-
export type { default as TransactionInput } from './TransactionInput.js'
|
|
4
|
-
export type { default as TransactionOutput } from './TransactionOutput.js'
|
|
5
|
-
export type * as Broadcaster from './Broadcaster.js'
|
|
6
|
-
export type { default as ChainTracker } from './ChainTracker.js'
|
package/ts2md.json
DELETED
package/tsconfig.base.json
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"lib": ["dom", "ESNext"],
|
|
4
|
-
"module": "NodeNext",
|
|
5
|
-
"target": "esnext",
|
|
6
|
-
"moduleResolution": "NodeNext",
|
|
7
|
-
"moduleDetection": "force",
|
|
8
|
-
"rootDir": "./",
|
|
9
|
-
"baseUrl": "./",
|
|
10
|
-
"strict": false,
|
|
11
|
-
"isolatedModules": true,
|
|
12
|
-
"strictNullChecks": false,
|
|
13
|
-
"downlevelIteration": false,
|
|
14
|
-
"skipLibCheck": true,
|
|
15
|
-
"forceConsistentCasingInFileNames": true,
|
|
16
|
-
"incremental": true,
|
|
17
|
-
"sourceMap": true,
|
|
18
|
-
"emitDecoratorMetadata": true,
|
|
19
|
-
"experimentalDecorators": true,
|
|
20
|
-
"resolveJsonModule": true,
|
|
21
|
-
"esModuleInterop": true
|
|
22
|
-
},
|
|
23
|
-
"files": ["mod.ts"],
|
|
24
|
-
"include": ["src"],
|
|
25
|
-
"exclude": ["dist", "*/**/__tests"]
|
|
26
|
-
}
|
package/tsconfig.cjs.json
DELETED
package/tsconfig.eslint.json
DELETED
package/tsconfig.esm.json
DELETED
package/tsconfig.json
DELETED