@bsv/wallet-toolbox 1.1.25 → 1.1.27
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/docs/client.md +78 -2313
- package/docs/setup.md +15 -19
- package/docs/wallet.md +78 -2313
- package/out/src/Setup.d.ts +4 -0
- package/out/src/Setup.d.ts.map +1 -1
- package/out/src/Setup.js +19 -9
- package/out/src/Setup.js.map +1 -1
- package/out/src/Wallet.d.ts +1 -6
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +2 -29
- package/out/src/Wallet.js.map +1 -1
- package/out/src/index.all.d.ts +0 -9
- package/out/src/index.all.d.ts.map +1 -1
- package/out/src/index.all.js +0 -9
- package/out/src/index.all.js.map +1 -1
- package/out/src/index.client.d.ts +0 -9
- package/out/src/index.client.d.ts.map +1 -1
- package/out/src/index.client.js +0 -9
- package/out/src/index.client.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +2 -0
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/test/examples/backup.test.d.ts +14 -0
- package/out/test/examples/backup.test.d.ts.map +1 -0
- package/out/test/examples/backup.test.js +59 -0
- package/out/test/examples/backup.test.js.map +1 -0
- package/out/test/wallet/action/abortAction.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/abortAction.test.js.map +1 -1
- package/out/test/wallet/action/createAction.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/createAction.test.js.map +1 -1
- package/out/test/{Wallet → wallet}/action/createAction2.test.d.ts.map +1 -1
- package/out/test/{Wallet → wallet}/action/createAction2.test.js.map +1 -1
- package/out/test/wallet/action/createActionToGenerateBeefs.man.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/createActionToGenerateBeefs.man.test.js.map +1 -1
- package/out/test/wallet/action/internalizeAction.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/internalizeAction.test.js.map +1 -1
- package/out/test/wallet/action/relinquishOutput.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/relinquishOutput.test.js.map +1 -1
- package/out/test/wallet/construct/Wallet.constructor.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/construct/Wallet.constructor.test.js.map +1 -1
- package/out/test/wallet/list/listActions.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/list/listActions.test.js.map +1 -1
- package/out/test/wallet/list/listActions2.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/list/listActions2.test.js.map +1 -1
- package/out/test/wallet/list/listCertificates.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/list/listCertificates.test.js.map +1 -1
- package/out/test/wallet/list/listOutputs.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/list/listOutputs.test.js.map +1 -1
- package/out/test/wallet/sync/Wallet.sync.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/sync/Wallet.sync.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/Setup.ts +22 -9
- package/src/Wallet.ts +3 -47
- package/src/index.all.ts +0 -9
- package/src/index.client.ts +0 -9
- package/src/storage/WalletStorageManager.ts +1 -0
- package/test/examples/backup.test.ts +66 -0
- package/out/src/CWIStyleWalletManager.d.ts +0 -411
- package/out/src/CWIStyleWalletManager.d.ts.map +0 -1
- package/out/src/CWIStyleWalletManager.js +0 -1131
- package/out/src/CWIStyleWalletManager.js.map +0 -1
- package/out/src/SetupClient.d.ts +0 -249
- package/out/src/SetupClient.d.ts.map +0 -1
- package/out/src/SetupClient.js +0 -252
- package/out/src/SetupClient.js.map +0 -1
- package/out/src/SimpleWalletManager.d.ts +0 -169
- package/out/src/SimpleWalletManager.d.ts.map +0 -1
- package/out/src/SimpleWalletManager.js +0 -315
- package/out/src/SimpleWalletManager.js.map +0 -1
- package/out/src/WalletAuthenticationManager.d.ts +0 -33
- package/out/src/WalletAuthenticationManager.d.ts.map +0 -1
- package/out/src/WalletAuthenticationManager.js +0 -107
- package/out/src/WalletAuthenticationManager.js.map +0 -1
- package/out/src/WalletPermissionsManager.d.ts +0 -575
- package/out/src/WalletPermissionsManager.d.ts.map +0 -1
- package/out/src/WalletPermissionsManager.js +0 -1807
- package/out/src/WalletPermissionsManager.js.map +0 -1
- package/out/src/WalletSettingsManager.d.ts +0 -59
- package/out/src/WalletSettingsManager.d.ts.map +0 -1
- package/out/src/WalletSettingsManager.js +0 -168
- package/out/src/WalletSettingsManager.js.map +0 -1
- package/out/src/__tests/CWIStyleWalletManager.test.d.ts +0 -2
- package/out/src/__tests/CWIStyleWalletManager.test.d.ts.map +0 -1
- package/out/src/__tests/CWIStyleWalletManager.test.js +0 -472
- package/out/src/__tests/CWIStyleWalletManager.test.js.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.callbacks.test.d.ts +0 -2
- package/out/src/__tests/WalletPermissionsManager.callbacks.test.d.ts.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.callbacks.test.js +0 -239
- package/out/src/__tests/WalletPermissionsManager.callbacks.test.js.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.checks.test.d.ts +0 -2
- package/out/src/__tests/WalletPermissionsManager.checks.test.d.ts.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.checks.test.js +0 -644
- package/out/src/__tests/WalletPermissionsManager.checks.test.js.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.encryption.test.d.ts +0 -2
- package/out/src/__tests/WalletPermissionsManager.encryption.test.d.ts.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.encryption.test.js +0 -295
- package/out/src/__tests/WalletPermissionsManager.encryption.test.js.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts +0 -82
- package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.fixtures.js +0 -260
- package/out/src/__tests/WalletPermissionsManager.fixtures.js.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.flows.test.d.ts +0 -2
- package/out/src/__tests/WalletPermissionsManager.flows.test.d.ts.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.flows.test.js +0 -389
- package/out/src/__tests/WalletPermissionsManager.flows.test.js.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.initialization.test.d.ts +0 -2
- package/out/src/__tests/WalletPermissionsManager.initialization.test.d.ts.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.initialization.test.js +0 -227
- package/out/src/__tests/WalletPermissionsManager.initialization.test.js.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.proxying.test.d.ts +0 -2
- package/out/src/__tests/WalletPermissionsManager.proxying.test.d.ts.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.proxying.test.js +0 -566
- package/out/src/__tests/WalletPermissionsManager.proxying.test.js.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.tokens.test.d.ts +0 -2
- package/out/src/__tests/WalletPermissionsManager.tokens.test.d.ts.map +0 -1
- package/out/src/__tests/WalletPermissionsManager.tokens.test.js +0 -460
- package/out/src/__tests/WalletPermissionsManager.tokens.test.js.map +0 -1
- package/out/src/utility/identityUtils.d.ts +0 -31
- package/out/src/utility/identityUtils.d.ts.map +0 -1
- package/out/src/utility/identityUtils.js +0 -114
- package/out/src/utility/identityUtils.js.map +0 -1
- package/out/src/wab-client/WABClient.d.ts +0 -38
- package/out/src/wab-client/WABClient.d.ts.map +0 -1
- package/out/src/wab-client/WABClient.js +0 -95
- package/out/src/wab-client/WABClient.js.map +0 -1
- package/out/src/wab-client/__tests/WABClient.test.d.ts +0 -2
- package/out/src/wab-client/__tests/WABClient.test.d.ts.map +0 -1
- package/out/src/wab-client/__tests/WABClient.test.js +0 -47
- package/out/src/wab-client/__tests/WABClient.test.js.map +0 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts +0 -34
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +0 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js +0 -16
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +0 -1
- package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.d.ts +0 -7
- package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.d.ts.map +0 -1
- package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.js +0 -40
- package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.js.map +0 -1
- package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.d.ts +0 -28
- package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.d.ts.map +0 -1
- package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.js +0 -73
- package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.js.map +0 -1
- package/out/test/Wallet/action/abortAction.test.d.ts.map +0 -1
- package/out/test/Wallet/action/createAction.test.d.ts.map +0 -1
- package/out/test/Wallet/action/createActionToGenerateBeefs.man.test.d.ts.map +0 -1
- package/out/test/Wallet/action/internalizeAction.test.d.ts.map +0 -1
- package/out/test/Wallet/action/relinquishOutput.test.d.ts.map +0 -1
- package/out/test/Wallet/construct/Wallet.constructor.test.d.ts.map +0 -1
- package/out/test/Wallet/list/listActions.test.d.ts.map +0 -1
- package/out/test/Wallet/list/listActions2.test.d.ts.map +0 -1
- package/out/test/Wallet/list/listCertificates.test.d.ts.map +0 -1
- package/out/test/Wallet/list/listOutputs.test.d.ts.map +0 -1
- package/out/test/Wallet/sync/Wallet.sync.test.d.ts.map +0 -1
- package/src/CWIStyleWalletManager.ts +0 -1891
- package/src/SimpleWalletManager.ts +0 -553
- package/src/WalletAuthenticationManager.ts +0 -183
- package/src/WalletPermissionsManager.ts +0 -2639
- package/src/WalletSettingsManager.ts +0 -241
- package/src/__tests/CWIStyleWalletManager.test.ts +0 -709
- package/src/__tests/WalletPermissionsManager.callbacks.test.ts +0 -328
- package/src/__tests/WalletPermissionsManager.checks.test.ts +0 -857
- package/src/__tests/WalletPermissionsManager.encryption.test.ts +0 -407
- package/src/__tests/WalletPermissionsManager.fixtures.ts +0 -283
- package/src/__tests/WalletPermissionsManager.flows.test.ts +0 -490
- package/src/__tests/WalletPermissionsManager.initialization.test.ts +0 -333
- package/src/__tests/WalletPermissionsManager.proxying.test.ts +0 -753
- package/src/__tests/WalletPermissionsManager.tokens.test.ts +0 -584
- package/src/utility/identityUtils.ts +0 -170
- package/src/wab-client/WABClient.ts +0 -103
- package/src/wab-client/__tests/WABClient.test.ts +0 -58
- package/src/wab-client/auth-method-interactors/AuthMethodInteractor.ts +0 -47
- package/src/wab-client/auth-method-interactors/PersonaIDInteractor.ts +0 -45
- package/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.ts +0 -82
- /package/out/test/{Wallet → wallet}/action/abortAction.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/abortAction.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/createAction.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/createAction.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/createAction2.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/createAction2.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/createActionToGenerateBeefs.man.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/createActionToGenerateBeefs.man.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/internalizeAction.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/internalizeAction.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/relinquishOutput.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/relinquishOutput.test.js +0 -0
- /package/out/test/{Wallet → wallet}/construct/Wallet.constructor.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/construct/Wallet.constructor.test.js +0 -0
- /package/out/test/{Wallet → wallet}/list/listActions.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/list/listActions.test.js +0 -0
- /package/out/test/{Wallet → wallet}/list/listActions2.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/list/listActions2.test.js +0 -0
- /package/out/test/{Wallet → wallet}/list/listCertificates.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/list/listCertificates.test.js +0 -0
- /package/out/test/{Wallet → wallet}/list/listOutputs.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/list/listOutputs.test.js +0 -0
- /package/out/test/{Wallet → wallet}/sync/Wallet.sync.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/sync/Wallet.sync.test.js +0 -0
- /package/test/{Wallet → wallet}/action/abortAction.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/createAction.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/createAction2.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/createActionToGenerateBeefs.man.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/internalizeAction.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/relinquishOutput.test.ts +0 -0
- /package/test/{Wallet → wallet}/construct/Wallet.constructor.test.ts +0 -0
- /package/test/{Wallet → wallet}/list/listActions.test.ts +0 -0
- /package/test/{Wallet → wallet}/list/listActions2.test.ts +0 -0
- /package/test/{Wallet → wallet}/list/listCertificates.test.ts +0 -0
- /package/test/{Wallet → wallet}/list/listOutputs.test.ts +0 -0
- /package/test/{Wallet → wallet}/sync/Wallet.sync.test.ts +0 -0
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
LockingScript,
|
|
3
|
-
PubKeyHex,
|
|
4
|
-
PushDrop,
|
|
5
|
-
Transaction,
|
|
6
|
-
Utils,
|
|
7
|
-
WalletInterface,
|
|
8
|
-
WalletProtocol
|
|
9
|
-
} from '@bsv/sdk'
|
|
10
|
-
|
|
11
|
-
export interface Certifier {
|
|
12
|
-
name: string
|
|
13
|
-
description: string
|
|
14
|
-
identityKey: PubKeyHex
|
|
15
|
-
trust: number
|
|
16
|
-
iconUrl?: string
|
|
17
|
-
baseURL?: string // ?
|
|
18
|
-
}
|
|
19
|
-
export interface TrustSettings {
|
|
20
|
-
trustLevel: number
|
|
21
|
-
trustedCertifiers: Certifier[]
|
|
22
|
-
}
|
|
23
|
-
export interface WalletTheme {
|
|
24
|
-
mode: string
|
|
25
|
-
}
|
|
26
|
-
export interface WalletSettings {
|
|
27
|
-
trustSettings: TrustSettings
|
|
28
|
-
theme?: WalletTheme
|
|
29
|
-
}
|
|
30
|
-
export interface WalletSettingsManagerConfig {
|
|
31
|
-
defaultSettings: WalletSettings
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const PROTOCOL_ID: WalletProtocol = [2, 'wallet settings']
|
|
35
|
-
const KEY_ID = '1'
|
|
36
|
-
const SETTINGS_BASKET = 'wallet settings'
|
|
37
|
-
const TOKEN_AMOUNT = 1
|
|
38
|
-
const OUTPUT_INDEX = 0
|
|
39
|
-
|
|
40
|
-
// Defaults can be overridden as needed
|
|
41
|
-
export const DEFAULT_SETTINGS = {
|
|
42
|
-
trustSettings: {
|
|
43
|
-
trustLevel: 2,
|
|
44
|
-
trustedCertifiers: [
|
|
45
|
-
{
|
|
46
|
-
name: 'Babbage Trust Services',
|
|
47
|
-
description:
|
|
48
|
-
'Resolves identity information for Babbage-run APIs and Bitcoin infrastructure.',
|
|
49
|
-
iconUrl: 'https://projectbabbage.com/favicon.ico',
|
|
50
|
-
identityKey:
|
|
51
|
-
'028703956178067ea7ca405111f1ca698290a0112a3d7cf3d843e195bf58a7cfa6',
|
|
52
|
-
trust: 4
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
name: 'IdentiCert',
|
|
56
|
-
description: 'Certifies legal first and last name, and photos',
|
|
57
|
-
iconUrl: 'https://identicert.me/favicon.ico',
|
|
58
|
-
trust: 5,
|
|
59
|
-
identityKey:
|
|
60
|
-
'0295bf1c7842d14babf60daf2c733956c331f9dcb2c79e41f85fd1dda6a3fa4549'
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
name: 'SocialCert',
|
|
64
|
-
description: 'Certifies social media handles, phone numbers and emails',
|
|
65
|
-
iconUrl: 'https://socialcert.net/favicon.ico',
|
|
66
|
-
trust: 3,
|
|
67
|
-
identityKey:
|
|
68
|
-
'03285263f06139b66fb27f51cf8a92e9dd007c4c4b83876ad6c3e7028db450a4c2'
|
|
69
|
-
}
|
|
70
|
-
]
|
|
71
|
-
},
|
|
72
|
-
theme: { mode: 'dark' }
|
|
73
|
-
} as WalletSettings
|
|
74
|
-
|
|
75
|
-
// Mapping of certifier names to their testnet identity keys
|
|
76
|
-
const TESTNET_IDENTITY_KEYS: Record<string, string> = {
|
|
77
|
-
'Babbage Trust Services':
|
|
78
|
-
'03d0b36b5c98b000ec9ffed9a2cf005e279244edf6a19cf90545cdebe873162761',
|
|
79
|
-
IdentiCert:
|
|
80
|
-
'036dc48522aba1705afbb43df3c04dbd1da373b6154341a875bceaa2a3e7f21528',
|
|
81
|
-
SocialCert:
|
|
82
|
-
'02cf6cdf466951d8dfc9e7c9367511d0007ed6fba35ed42d425cc412fd6cfd4a17'
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Define defaults that can be imported for a testnet environment
|
|
86
|
-
export const TESTNET_DEFAULT_SETTINGS: WalletSettings = {
|
|
87
|
-
...DEFAULT_SETTINGS,
|
|
88
|
-
trustSettings: {
|
|
89
|
-
...DEFAULT_SETTINGS.trustSettings,
|
|
90
|
-
trustedCertifiers: DEFAULT_SETTINGS.trustSettings.trustedCertifiers.map(
|
|
91
|
-
certifier => ({
|
|
92
|
-
...certifier,
|
|
93
|
-
// Use the testnet key if provided, otherwise fallback to the default
|
|
94
|
-
identityKey:
|
|
95
|
-
TESTNET_IDENTITY_KEYS[certifier.name] || certifier.identityKey
|
|
96
|
-
})
|
|
97
|
-
)
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Manages wallet settings
|
|
103
|
-
*/
|
|
104
|
-
export class WalletSettingsManager {
|
|
105
|
-
constructor(
|
|
106
|
-
private wallet: WalletInterface,
|
|
107
|
-
private config: WalletSettingsManagerConfig = {
|
|
108
|
-
defaultSettings: DEFAULT_SETTINGS
|
|
109
|
-
}
|
|
110
|
-
) {}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Returns a user's wallet settings
|
|
114
|
-
*
|
|
115
|
-
* @returns - Wallet settings object
|
|
116
|
-
*/
|
|
117
|
-
async get(): Promise<WalletSettings> {
|
|
118
|
-
// List outputs in the 'wallet-settings' basket
|
|
119
|
-
const results = await this.wallet.listOutputs({
|
|
120
|
-
basket: SETTINGS_BASKET,
|
|
121
|
-
include: 'locking scripts',
|
|
122
|
-
limit: 1 // There should only be one settings token
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
// Return defaults if no settings token is found
|
|
126
|
-
if (!results.outputs.length) {
|
|
127
|
-
return this.config.defaultSettings
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
const { fields } = PushDrop.decode(
|
|
131
|
-
LockingScript.fromHex(results.outputs[OUTPUT_INDEX].lockingScript!)
|
|
132
|
-
)
|
|
133
|
-
// Parse and return settings token
|
|
134
|
-
return JSON.parse(Utils.toUTF8(fields[0]))
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Creates (or updates) the user's settings token.
|
|
139
|
-
*
|
|
140
|
-
* @param settings - The wallet settings to be stored.
|
|
141
|
-
*/
|
|
142
|
-
async set(settings: WalletSettings): Promise<void> {
|
|
143
|
-
const pushdrop = new PushDrop(this.wallet)
|
|
144
|
-
|
|
145
|
-
// Build the new locking script with the updated settings JSON.
|
|
146
|
-
const lockingScript = await pushdrop.lock(
|
|
147
|
-
[Utils.toArray(JSON.stringify(settings), 'utf8')],
|
|
148
|
-
PROTOCOL_ID,
|
|
149
|
-
KEY_ID,
|
|
150
|
-
'self'
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
// Consume any existing token and create a new one with the new locking script.
|
|
154
|
-
await this.consumeToken(lockingScript)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Deletes the user's settings token.
|
|
159
|
-
*/
|
|
160
|
-
async delete(): Promise<void> {
|
|
161
|
-
// Consume the token; if none exists, consumeToken simply returns.
|
|
162
|
-
await this.consumeToken()
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Consumes an existing settings token.
|
|
167
|
-
* If a new locking script is provided, a new token is created with that script.
|
|
168
|
-
* Otherwise, the token is simply consumed (deleted).
|
|
169
|
-
*
|
|
170
|
-
* @param newLockingScript - Optional locking script for creating a new settings token.
|
|
171
|
-
* @returns {Promise<boolean>} - Returns false if no token was found; otherwise true.
|
|
172
|
-
*/
|
|
173
|
-
private async consumeToken(
|
|
174
|
-
newLockingScript?: LockingScript
|
|
175
|
-
): Promise<boolean> {
|
|
176
|
-
const pushdrop = new PushDrop(this.wallet)
|
|
177
|
-
|
|
178
|
-
// 1. List the existing token UTXO(s) for the settings basket.
|
|
179
|
-
const existingUtxos = await this.wallet.listOutputs({
|
|
180
|
-
basket: SETTINGS_BASKET,
|
|
181
|
-
limit: 1
|
|
182
|
-
})
|
|
183
|
-
if (!existingUtxos.outputs.length) {
|
|
184
|
-
// No token exists – nothing to consume.
|
|
185
|
-
return false
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// 2. Prepare the token UTXO for consumption.
|
|
189
|
-
const tokenOutput = existingUtxos.outputs[OUTPUT_INDEX]
|
|
190
|
-
const inputToConsume = {
|
|
191
|
-
outpoint: tokenOutput.outpoint,
|
|
192
|
-
unlockingScriptLength: 73,
|
|
193
|
-
inputDescription: 'Consume old settings token',
|
|
194
|
-
lockingScript: tokenOutput.lockingScript
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// 3. Build the outputs array: if a new locking script is provided, add an output.
|
|
198
|
-
const outputs = newLockingScript
|
|
199
|
-
? [
|
|
200
|
-
{
|
|
201
|
-
satoshis: TOKEN_AMOUNT,
|
|
202
|
-
lockingScript: newLockingScript.toHex(),
|
|
203
|
-
outputDescription: 'Wallet settings token',
|
|
204
|
-
basket: SETTINGS_BASKET
|
|
205
|
-
}
|
|
206
|
-
]
|
|
207
|
-
: []
|
|
208
|
-
|
|
209
|
-
// 4. Create a signable transaction action using the inputs and (optionally) outputs.
|
|
210
|
-
const { signableTransaction } = await this.wallet.createAction({
|
|
211
|
-
description: '',
|
|
212
|
-
inputs: [inputToConsume],
|
|
213
|
-
outputs
|
|
214
|
-
})
|
|
215
|
-
const tx = Transaction.fromBEEF(signableTransaction!.tx)
|
|
216
|
-
|
|
217
|
-
// 5. Build and sign the unlocking script for the token being consumed.
|
|
218
|
-
const unlocker = pushdrop.unlock(
|
|
219
|
-
PROTOCOL_ID,
|
|
220
|
-
KEY_ID,
|
|
221
|
-
'self',
|
|
222
|
-
'all',
|
|
223
|
-
false,
|
|
224
|
-
TOKEN_AMOUNT,
|
|
225
|
-
LockingScript.fromHex(tokenOutput.lockingScript!)
|
|
226
|
-
)
|
|
227
|
-
const unlockingScript = await unlocker.sign(tx, OUTPUT_INDEX)
|
|
228
|
-
|
|
229
|
-
// 6. Sign the transaction using our unlocking script.
|
|
230
|
-
await this.wallet.signAction({
|
|
231
|
-
reference: signableTransaction!.reference,
|
|
232
|
-
spends: {
|
|
233
|
-
[OUTPUT_INDEX]: {
|
|
234
|
-
unlockingScript: unlockingScript.toHex()
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
})
|
|
238
|
-
|
|
239
|
-
return true
|
|
240
|
-
}
|
|
241
|
-
}
|