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