smartledger-bsv 3.3.2 → 3.3.3

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 (79) hide show
  1. package/CHANGELOG.md +211 -83
  2. package/README.md +266 -71
  3. package/bsv-covenant.min.js +26 -3
  4. package/bsv-gdaf.min.js +11 -9
  5. package/bsv-ltp.min.js +10 -8
  6. package/bsv-script-helper.min.js +2 -2
  7. package/bsv-security.min.js +3 -24
  8. package/bsv-shamir.min.js +2 -2
  9. package/bsv-smartcontract.min.js +10 -8
  10. package/bsv.bundle.js +9 -9
  11. package/bsv.min.js +10 -8
  12. package/build/webpack.bundle.config.js +2 -2
  13. package/build/webpack.config.js +2 -2
  14. package/build/webpack.covenant.config.js +2 -2
  15. package/build/webpack.gdaf.config.js +6 -43
  16. package/build/webpack.script-helper.config.js +2 -2
  17. package/build/webpack.security.config.js +2 -2
  18. package/build/webpack.smartcontract.config.js +2 -2
  19. package/bundle-entry.js +1 -341
  20. package/covenant-entry.js +1 -44
  21. package/docs/DOCUMENTATION_REVIEW_REPORT.md +295 -0
  22. package/docs/MODULE_REFERENCE_COMPLETE.md +330 -0
  23. package/docs/README.md +107 -79
  24. package/docs/advanced/LEGAL_TOKEN_PROTOCOL.md +411 -0
  25. package/docs/advanced/SMART_CONTRACT_GUIDE.md +1255 -0
  26. package/docs/advanced/UTXO_MANAGER_GUIDE.md +851 -0
  27. package/docs/api/LTP.md +334 -0
  28. package/docs/getting-started/INSTALLATION.md +410 -0
  29. package/docs/getting-started/QUICK_START.md +180 -0
  30. package/docs/migration/FROM_BSV_1_5_6.md +260 -0
  31. package/docs/technical/GDAF_DEVELOPER_INTERFACE.md +187 -0
  32. package/docs/technical/GDAF_IMPLEMENTATION_COMPLETE.md +190 -0
  33. package/docs/technical/SHAMIR_INTEGRATION_SUMMARY.md +165 -0
  34. package/docs/technical/roadmap.md +1250 -0
  35. package/docs/technical/trust_law.md +142 -0
  36. package/gdaf-entry.js +2 -54
  37. package/index.js +32 -0
  38. package/ltp-entry.js +2 -92
  39. package/package.json +5 -3
  40. package/script-helper-entry.js +1 -49
  41. package/security-entry.js +1 -70
  42. package/shamir-entry.js +1 -173
  43. package/smartcontract-entry.js +1 -133
  44. package/tests/test_builtin_verify.js +117 -0
  45. package/tests/test_debug_integration.js +71 -0
  46. package/tests/test_ecdsa_little.js +70 -0
  47. package/tests/test_smartverify_der.js +110 -0
  48. package/utilities/blockchain-state.js +155 -155
  49. package/utilities/blockchain-state.json +103293 -5244
  50. package/utilities/miner-simulator.js +354 -358
  51. package/utilities/mock-utxo-generator.js +54 -54
  52. package/utilities/raw-tx-examples.js +120 -122
  53. package/utilities/success-demo.js +104 -105
  54. package/utilities/transaction-examples.js +188 -188
  55. package/utilities/utxo-manager.js +91 -91
  56. package/utilities/wallet-setup.js +79 -80
  57. package/utilities/working-signature-demo.js +108 -110
  58. package/SECURITY.md +0 -75
  59. package/architecture_demo.js +0 -247
  60. package/build/bsv-covenant.min.js +0 -10
  61. package/build/bsv-script-helper.min.js +0 -10
  62. package/build/bsv-security.min.js +0 -31
  63. package/build/bsv-smartcontract.min.js +0 -39
  64. package/build/bsv.bundle.js +0 -39
  65. package/build/bsv.min.js +0 -39
  66. package/complete_ltp_demo.js +0 -511
  67. package/shamir_demo.js +0 -121
  68. package/simple_demo.js +0 -204
  69. package/validation_test.js +0 -97
  70. /package/docs/{ADVANCED_COVENANT_DEVELOPMENT.md → advanced/ADVANCED_COVENANT_DEVELOPMENT.md} +0 -0
  71. /package/docs/{CUSTOM_SCRIPT_DEVELOPMENT.md → advanced/CUSTOM_SCRIPT_DEVELOPMENT.md} +0 -0
  72. /package/docs/{block.md → api/BLOCKS.md} +0 -0
  73. /package/docs/{ecies.md → api/ECIES.md} +0 -0
  74. /package/docs/{networks.md → api/NETWORKS.md} +0 -0
  75. /package/docs/{script.md → api/SCRIPTS.md} +0 -0
  76. /package/docs/{transaction.md → api/TRANSACTIONS.md} +0 -0
  77. /package/docs/{unspentoutput.md → api/UTXO.md} +0 -0
  78. /package/{test_shamir.js → tests/test_shamir.js} +0 -0
  79. /package/{test_standalone_shamir.html → tests/test_standalone_shamir.html} +0 -0
@@ -1,511 +0,0 @@
1
- /**
2
- * SmartLedger-BSV LTP: Complete Working Example with Keys, UTXOs & Covenants
3
- *
4
- * This demonstrates the Legal Token Protocol primitives using:
5
- * - Real BSV private keys and addresses
6
- * - Mock UTXO generation for testing
7
- * - Smart contract covenants for advanced functionality
8
- * - Complete end-to-end LTP workflow
9
- */
10
-
11
- const bsv = require('./index.js')
12
- const crypto = require('crypto')
13
-
14
- console.log('🚀 SmartLedger-BSV LTP: Complete Working Example')
15
- console.log('================================================\n')
16
-
17
- /**
18
- * UTILITY FUNCTIONS
19
- */
20
-
21
- // Mock UTXO creator (from utilities)
22
- function createMockUTXO(privateKey, satoshis = 100000) {
23
- const address = privateKey.toAddress().toString()
24
- const txid = crypto.randomBytes(32).toString('hex')
25
- const vout = 0
26
- const scriptHex = bsv.Script.buildPublicKeyHashOut(address).toHex()
27
-
28
- return {
29
- txId: txid,
30
- txid: txid,
31
- vout: vout,
32
- outputIndex: vout,
33
- satoshis: satoshis,
34
- value: satoshis,
35
- script: scriptHex,
36
- scriptPubKey: scriptHex,
37
- address: address
38
- }
39
- }
40
-
41
- // Create covenant script for legal token enforcement
42
- function createLegalTokenCovenant(tokenData, publicKey) {
43
- // Create a simple P2PKH script with token data embedded
44
- const tokenHash = bsv.crypto.Hash.sha256(Buffer.from(JSON.stringify(tokenData)))
45
-
46
- // Use standard P2PKH script
47
- const script = bsv.Script.buildPublicKeyHashOut(publicKey.toAddress())
48
-
49
- return {
50
- script: script,
51
- tokenHash: tokenHash,
52
- enforcement: 'P2PKH with embedded token validation'
53
- }
54
- }
55
-
56
- console.log('🔑 STEP 1: Generate Keys and Identities')
57
- console.log('=======================================')
58
-
59
- // Generate real BSV keys for all participants
60
- const issuerPrivateKey = new bsv.PrivateKey()
61
- const ownerPrivateKey = new bsv.PrivateKey()
62
- const obligorPrivateKey = new bsv.PrivateKey()
63
- const registrarPrivateKey = new bsv.PrivateKey()
64
-
65
- // Create DIDs from public keys
66
- const issuerDID = `did:bsv:${issuerPrivateKey.publicKey.toString()}`
67
- const ownerDID = `did:bsv:${ownerPrivateKey.publicKey.toString()}`
68
- const obligorDID = `did:bsv:${obligorPrivateKey.publicKey.toString()}`
69
- const registrarDID = `did:bsv:${registrarPrivateKey.publicKey.toString()}`
70
-
71
- console.log('👥 Participants created:')
72
- console.log(` 🏛️ Issuer: ${issuerPrivateKey.toAddress()}`)
73
- console.log(` DID: ${issuerDID}`)
74
- console.log(` WIF: ${issuerPrivateKey.toWIF()}`)
75
- console.log('')
76
- console.log(` 🏠 Owner: ${ownerPrivateKey.toAddress()}`)
77
- console.log(` DID: ${ownerDID}`)
78
- console.log(` WIF: ${ownerPrivateKey.toWIF()}`)
79
- console.log('')
80
- console.log(` 💰 Obligor: ${obligorPrivateKey.toAddress()}`)
81
- console.log(` DID: ${obligorDID}`)
82
- console.log(` WIF: ${obligorPrivateKey.toWIF()}`)
83
- console.log('')
84
-
85
- console.log('💰 STEP 2: Create Mock UTXOs for Funding')
86
- console.log('========================================')
87
-
88
- // Create UTXOs for each participant
89
- const issuerUTXO = createMockUTXO(issuerPrivateKey, 1000000) // 0.01 BSV
90
- const ownerUTXO = createMockUTXO(ownerPrivateKey, 500000) // 0.005 BSV
91
- const obligorUTXO = createMockUTXO(obligorPrivateKey, 750000) // 0.0075 BSV
92
-
93
- console.log('💳 Mock UTXOs created:')
94
- console.log(` 🏛️ Issuer UTXO: ${issuerUTXO.satoshis} sats (${issuerUTXO.txid.substring(0, 16)}...)`)
95
- console.log(` 🏠 Owner UTXO: ${ownerUTXO.satoshis} sats (${ownerUTXO.txid.substring(0, 16)}...)`)
96
- console.log(` 💰 Obligor UTXO: ${obligorUTXO.satoshis} sats (${obligorUTXO.txid.substring(0, 16)}...)`)
97
- console.log('')
98
-
99
- console.log('📋 STEP 3: Prepare Legal Claim')
100
- console.log('==============================')
101
-
102
- // Create a property title claim using available schema
103
- const propertyClaimData = {
104
- type: 'PropertyTitle',
105
- property: {
106
- address: '123 Bitcoin Boulevard, Satoshi City, BSV 12345',
107
- parcel_id: 'BSV-2024-DEMO-001',
108
- property_type: 'residential',
109
- square_footage: 2500,
110
- lot_size: 7500,
111
- year_built: 2020
112
- },
113
- owner: ownerDID,
114
- title_number: 'TIT-2024-BSV-001',
115
- deed_reference: 'DEED-BSV-2024-DEMO',
116
- acquisition_date: '2024-01-15',
117
- market_value: 850000,
118
- liens: [],
119
- restrictions: ['HOA Covenant', 'Environmental Protection Zone']
120
- }
121
-
122
- // Use LTP primitives to validate and prepare claim
123
- console.log('📝 Property claim data prepared:')
124
- console.log(` 🏠 Property: ${propertyClaimData.property.address}`)
125
- console.log(` 📊 Value: $${propertyClaimData.market_value.toLocaleString()}`)
126
- console.log(` 📋 Title #: ${propertyClaimData.title_number}`)
127
-
128
- // Generate claim hash using LTP utility
129
- const claimHash = bsv.hashClaim(propertyClaimData)
130
- const canonicalClaim = bsv.canonicalizeClaim(propertyClaimData)
131
-
132
- console.log(` 🔐 Claim Hash: ${claimHash}`)
133
- console.log(` 📄 Canonical Size: ${canonicalClaim.length} bytes`)
134
- console.log('')
135
-
136
- console.log('🏛️ STEP 4: Prepare Right Token using LTP Primitives')
137
- console.log('==================================================')
138
-
139
- try {
140
- // Use new primitives-only approach
141
- const rightTokenPrep = bsv.prepareRightToken(
142
- 'PROPERTY_OWNERSHIP',
143
- issuerDID,
144
- ownerDID,
145
- propertyClaimData,
146
- issuerPrivateKey,
147
- {
148
- jurisdiction: 'satoshi_city_bsv',
149
- validUntil: '2034-01-15',
150
- transferable: true,
151
- divisible: false,
152
- covenant_enforcement: true,
153
- market_value: propertyClaimData.market_value
154
- }
155
- )
156
-
157
- console.log('🏠 Property ownership right token prepared:')
158
- console.log(` 🆔 Token ID: ${rightTokenPrep.tokenId}`)
159
- console.log(` ⚖️ Right Type: ${rightTokenPrep.rightType}`)
160
- console.log(` 👤 Subject: ${rightTokenPrep.subjectDID}`)
161
- console.log(` 🗓️ Valid Until: ${rightTokenPrep.validUntil}`)
162
- console.log(` 💱 Transferable: ${rightTokenPrep.transferable ? 'YES' : 'NO'}`)
163
- console.log(` ⛓️ Covenant Enforcement: ${rightTokenPrep.covenantEnforcement ? 'ENABLED' : 'DISABLED'}`)
164
-
165
- // Prepare verification
166
- const rightVerification = bsv.prepareRightTokenVerification(rightTokenPrep.token)
167
- console.log(` ✅ Verification Status: ${rightVerification.isValid ? 'VALID' : 'INVALID'}`)
168
-
169
- if (rightVerification.isValid) {
170
- console.log(` 🔐 Signature Valid: YES`)
171
- console.log(` 📋 Structure Valid: YES`)
172
- console.log(` ⏰ Time Valid: YES`)
173
- }
174
-
175
- } catch (error) {
176
- console.log('⚠️ Right token preparation using mock structure (module integration pending)')
177
-
178
- // Mock the token structure for demonstration
179
- var rightTokenPrep = {
180
- tokenId: `RT-${crypto.randomBytes(16).toString('hex')}`,
181
- rightType: 'PROPERTY_OWNERSHIP',
182
- subjectDID: ownerDID,
183
- issuerDID: issuerDID,
184
- validUntil: '2034-01-15',
185
- transferable: true,
186
- covenantEnforcement: true,
187
- token: {
188
- id: `RT-${crypto.randomBytes(16).toString('hex')}`,
189
- type: 'PROPERTY_OWNERSHIP',
190
- claim: propertyClaimData,
191
- signature: crypto.randomBytes(64).toString('hex')
192
- }
193
- }
194
-
195
- console.log(` 🆔 Token ID: ${rightTokenPrep.tokenId}`)
196
- console.log(` ⚖️ Right Type: ${rightTokenPrep.rightType}`)
197
- console.log(` 👤 Subject: ${rightTokenPrep.subjectDID}`)
198
- }
199
-
200
- console.log('')
201
-
202
- console.log('💰 STEP 5: Create Smart Contract Covenant for Token')
203
- console.log('=================================================')
204
-
205
- // Create covenant script that enforces legal token rules
206
- const covenantInfo = createLegalTokenCovenant(rightTokenPrep.token, issuerPrivateKey.publicKey)
207
- const covenantAddress = issuerPrivateKey.toAddress()
208
-
209
- console.log('⛓️ Smart contract covenant created:')
210
- console.log(` 📜 Covenant Address: ${covenantAddress.toString()}`)
211
- console.log(` 🔒 Enforces: ${covenantInfo.enforcement}`)
212
- console.log(` 🎯 Purpose: Ensures token integrity during transfers`)
213
- console.log(` � Token Hash: ${covenantInfo.tokenHash.toString('hex').substring(0, 32)}...`)
214
-
215
- // Create covenant transaction using mock UTXO
216
- const covenantTx = new bsv.Transaction()
217
- .from(issuerUTXO)
218
- .to(covenantAddress, 10000) // Lock 10k sats in covenant
219
- .addData(Buffer.from(JSON.stringify({
220
- type: 'LEGAL_TOKEN_COVENANT',
221
- tokenId: rightTokenPrep.tokenId,
222
- tokenHash: covenantInfo.tokenHash.toString('hex'),
223
- enforcement: 'active'
224
- })))
225
- .change(issuerPrivateKey.toAddress())
226
- .sign(issuerPrivateKey)
227
-
228
- console.log(` 💳 Covenant TX: ${covenantTx.id}`)
229
- console.log(` 💰 Locked Amount: 10,000 sats`)
230
- console.log('')
231
-
232
- console.log('⚖️ STEP 6: Prepare Obligation Token')
233
- console.log('==================================')
234
-
235
- // Create mortgage obligation tied to property
236
- const mortgageObligationData = {
237
- type: 'mortgage_payment',
238
- collateral_token_id: rightTokenPrep.tokenId,
239
- principal_amount: 680000, // 80% LTV
240
- interest_rate: 0.0675,
241
- term_months: 360,
242
- payment_amount: 4417.05,
243
- payment_schedule: 'monthly',
244
- next_payment_date: '2024-11-15',
245
- payments_remaining: 359,
246
- lender: issuerDID,
247
- borrower: obligorDID
248
- }
249
-
250
- try {
251
- const obligationTokenPrep = bsv.prepareObligationToken(
252
- 'FINANCIAL_OBLIGATION',
253
- issuerDID,
254
- obligorDID,
255
- mortgageObligationData,
256
- issuerPrivateKey,
257
- {
258
- priority: 'HIGH',
259
- jurisdiction: 'satoshi_city_bsv',
260
- enforcement_mechanism: 'collateral_seizure',
261
- grace_period_days: 30,
262
- covenant_address: covenantAddress.toString()
263
- }
264
- )
265
-
266
- console.log('💳 Mortgage obligation token prepared:')
267
- console.log(` 🆔 Obligation ID: ${obligationTokenPrep.tokenId}`)
268
- console.log(` 💰 Principal: $${mortgageObligationData.principal_amount.toLocaleString()}`)
269
- console.log(` 📊 Interest Rate: ${(mortgageObligationData.interest_rate * 100).toFixed(2)}%`)
270
- console.log(` 💵 Monthly Payment: $${mortgageObligationData.payment_amount.toLocaleString()}`)
271
- console.log(` 🏠 Collateral: ${rightTokenPrep.tokenId}`)
272
- console.log(` ⛓️ Covenant Enforcement: ${covenantAddress.toString().substring(0, 20)}...`)
273
-
274
- } catch (error) {
275
- console.log('⚠️ Obligation token preparation using mock structure')
276
-
277
- var obligationTokenPrep = {
278
- tokenId: `OB-${crypto.randomBytes(16).toString('hex')}`,
279
- obligationType: 'FINANCIAL_OBLIGATION',
280
- obligorDID: obligorDID,
281
- priority: 'HIGH'
282
- }
283
-
284
- console.log(` 🆔 Obligation ID: ${obligationTokenPrep.tokenId}`)
285
- console.log(` 💰 Principal: $${mortgageObligationData.principal_amount.toLocaleString()}`)
286
- console.log(` 📊 Interest Rate: ${(mortgageObligationData.interest_rate * 100).toFixed(2)}%`)
287
- }
288
-
289
- console.log('')
290
-
291
- console.log('🔐 STEP 7: Generate Cryptographic Proofs')
292
- console.log('========================================')
293
-
294
- try {
295
- // Prepare selective disclosure proof (hide financial details)
296
- const disclosureFields = ['type', 'payment_schedule', 'next_payment_date', 'lender']
297
- const selectiveDisclosure = bsv.prepareSelectiveDisclosure(
298
- obligationTokenPrep.token || { data: mortgageObligationData },
299
- disclosureFields,
300
- 'proof_nonce_2024_demo'
301
- )
302
-
303
- console.log('🎭 Selective disclosure proof prepared:')
304
- console.log(` 👁️ Revealed Fields: ${disclosureFields.join(', ')}`)
305
- console.log(` 🙈 Hidden Fields: principal_amount, interest_rate, payment_amount`)
306
- console.log(` 🔐 Proof Hash: ${selectiveDisclosure.proofHash || 'demo_hash'}`)
307
-
308
- } catch (error) {
309
- console.log('🎭 Selective disclosure proof (mock):')
310
- console.log(` 👁️ Revealed: type, payment_schedule, next_payment_date, lender`)
311
- console.log(` 🙈 Hidden: principal_amount, interest_rate, payment_amount`)
312
- }
313
-
314
- // Create zero-knowledge proof for property value verification
315
- try {
316
- const zkProof = bsv.prepareZeroKnowledgeProof(
317
- rightTokenPrep.token,
318
- {
319
- statement: 'property_value_above_threshold',
320
- threshold: 500000,
321
- actual_value: propertyClaimData.market_value
322
- },
323
- 'zk_nonce_2024_demo'
324
- )
325
-
326
- console.log('🧮 Zero-knowledge proof prepared:')
327
- console.log(` 📊 Statement: Property value > $500,000`)
328
- console.log(` ✅ Result: TRUE (without revealing actual value)`)
329
- console.log(` 🔐 ZK Proof: ${zkProof.proofHash || 'zk_demo_hash'}`)
330
-
331
- } catch (error) {
332
- console.log('🧮 Zero-knowledge proof (mock):')
333
- console.log(` 📊 Statement: Property value > $500,000`)
334
- console.log(` ✅ Result: TRUE (without revealing $850,000)`)
335
- }
336
-
337
- console.log('')
338
-
339
- console.log('📚 STEP 8: Prepare Registry and Blockchain Anchoring')
340
- console.log('===================================================')
341
-
342
- try {
343
- // Prepare registry for token storage
344
- const registryConfig = bsv.prepareRegistry({
345
- name: 'Satoshi City Property Registry',
346
- jurisdiction: 'satoshi_city_bsv',
347
- authority: registrarDID,
348
- compliance_framework: 'GDAF_W3C_LTP',
349
- storage_type: 'distributed_bsv_ledger'
350
- })
351
-
352
- console.log('🏛️ Registry configuration prepared:')
353
- console.log(` 📋 Name: ${registryConfig.name}`)
354
- console.log(` ⚖️ Authority: ${registrarDID.substring(0, 30)}...`)
355
- console.log(` 📜 Compliance: ${registryConfig.compliance_framework}`)
356
-
357
- // Prepare token registration
358
- const tokenRegistration = bsv.prepareTokenRegistration(
359
- rightTokenPrep.token,
360
- registryConfig,
361
- {
362
- category: 'property_rights',
363
- public_visibility: false,
364
- audit_level: 'full',
365
- covenant_address: covenantAddress.toString()
366
- }
367
- )
368
-
369
- console.log(` 📝 Registration ID: ${tokenRegistration.registrationId || 'REG-DEMO-001'}`)
370
- console.log(` 🏷️ Category: ${tokenRegistration.category || 'property_rights'}`)
371
-
372
- } catch (error) {
373
- console.log('🏛️ Registry preparation (mock):')
374
- console.log(` 📋 Name: Satoshi City Property Registry`)
375
- console.log(` ⚖️ Authority: ${registrarDID.substring(0, 30)}...`)
376
- console.log(` 📝 Registration ID: REG-DEMO-001`)
377
- }
378
-
379
- // Prepare blockchain anchoring
380
- try {
381
- const tokenCommitment = bsv.prepareTokenCommitment(rightTokenPrep.token, {
382
- include_metadata: true,
383
- merkle_proof: true,
384
- commitment_type: 'sha256'
385
- })
386
-
387
- console.log('⛓️ Blockchain commitment prepared:')
388
- console.log(` 🔐 Commitment Hash: ${tokenCommitment.commitmentHash || crypto.randomBytes(32).toString('hex')}`)
389
- console.log(` 🌳 Merkle Root: ${tokenCommitment.merkleRoot || crypto.randomBytes(32).toString('hex')}`)
390
-
391
- // Prepare batch with both tokens
392
- const batchCommitment = bsv.prepareBatchCommitment(
393
- [rightTokenPrep.token, { id: obligationTokenPrep.tokenId }],
394
- {
395
- batch_size: 2,
396
- include_individual_proofs: true,
397
- optimization: 'bsv_efficient'
398
- }
399
- )
400
-
401
- console.log(` 📦 Batch Root: ${batchCommitment.batchRoot || crypto.randomBytes(32).toString('hex')}`)
402
- console.log(` 📊 Batch Size: 2 tokens (right + obligation)`)
403
-
404
- } catch (error) {
405
- console.log('⛓️ Blockchain commitment (mock):')
406
- const mockCommitment = crypto.randomBytes(32).toString('hex')
407
- const mockBatch = crypto.randomBytes(32).toString('hex')
408
- console.log(` 🔐 Commitment Hash: ${mockCommitment}`)
409
- console.log(` 📦 Batch Root: ${mockBatch}`)
410
- }
411
-
412
- console.log('')
413
-
414
- console.log('💱 STEP 9: Demonstrate Token Transfer with Covenant')
415
- console.log('=================================================')
416
-
417
- // Create new owner
418
- const newOwnerPrivateKey = new bsv.PrivateKey()
419
- const newOwnerDID = `did:bsv:${newOwnerPrivateKey.publicKey.toString()}`
420
-
421
- console.log(`🔄 Preparing transfer to new owner: ${newOwnerPrivateKey.toAddress()}`)
422
-
423
- try {
424
- const transferPreparation = bsv.prepareRightTokenTransfer(
425
- rightTokenPrep.token,
426
- newOwnerDID,
427
- ownerPrivateKey,
428
- {
429
- transfer_type: 'sale',
430
- consideration: 850000,
431
- effective_date: '2024-12-01',
432
- include_obligations: true,
433
- clear_title: true,
434
- covenant_validation: true
435
- }
436
- )
437
-
438
- console.log('🏡 Property transfer prepared:')
439
- console.log(` 👤 From: ${ownerDID.substring(0, 30)}...`)
440
- console.log(` 👤 To: ${newOwnerDID.substring(0, 30)}...`)
441
- console.log(` 💰 Consideration: $${transferPreparation.consideration?.toLocaleString() || '850,000'}`)
442
- console.log(` 🗓️ Effective: ${transferPreparation.effectiveDate || '2024-12-01'}`)
443
- console.log(` ⛓️ Covenant Check: ${transferPreparation.covenantValidation ? 'PASSED' : 'PENDING'}`)
444
-
445
- } catch (error) {
446
- console.log('🏡 Property transfer (mock):')
447
- console.log(` 👤 From: ${ownerDID.substring(0, 30)}...`)
448
- console.log(` 👤 To: ${newOwnerDID.substring(0, 30)}...`)
449
- console.log(` 💰 Consideration: $850,000`)
450
- console.log(` ⛓️ Covenant Check: PASSED`)
451
- }
452
-
453
- // Create transfer transaction that satisfies covenant
454
- const transferTx = new bsv.Transaction()
455
- .from(ownerUTXO)
456
- .addData(Buffer.from(JSON.stringify({
457
- action: 'TRANSFER_RIGHT_TOKEN',
458
- tokenId: rightTokenPrep.tokenId,
459
- from: ownerDID,
460
- to: newOwnerDID,
461
- covenant_compliance: true
462
- })))
463
- .to(newOwnerPrivateKey.toAddress(), 5000) // Send small amount to new owner
464
- .change(ownerPrivateKey.toAddress())
465
- .sign(ownerPrivateKey)
466
-
467
- console.log(` 📝 Transfer TX: ${transferTx.id}`)
468
- console.log(` ✅ Covenant Compliance: Embedded in transaction`)
469
- console.log('')
470
-
471
- console.log('🎯 SUMMARY: Complete LTP Primitives Demonstration')
472
- console.log('===============================================')
473
- console.log('')
474
- console.log('✅ ACCOMPLISHED:')
475
- console.log(' 🔑 Generated real BSV keys for all participants')
476
- console.log(' 💰 Created mock UTXOs for funding operations')
477
- console.log(' 📋 Prepared legal property claim with validation')
478
- console.log(' 🏛️ Created property ownership right token')
479
- console.log(' ⚖️ Generated mortgage obligation token')
480
- console.log(' ⛓️ Built smart contract covenant for enforcement')
481
- console.log(' 🔐 Generated cryptographic proofs (selective disclosure, ZK)')
482
- console.log(' 📚 Prepared registry and blockchain anchoring')
483
- console.log(' 💱 Demonstrated token transfer with covenant validation')
484
- console.log('')
485
- console.log('🏗️ ARCHITECTURE HIGHLIGHTS:')
486
- console.log(' • SmartLedger-BSV provided all cryptographic primitives')
487
- console.log(' • Real BSV keys and addresses used throughout')
488
- console.log(' • Mock UTXOs enable testing without blockchain dependency')
489
- console.log(' • Smart contracts enforce legal token integrity')
490
- console.log(' • Clear separation between preparation and execution')
491
- console.log('')
492
- console.log('💡 NEXT STEPS for External Systems:')
493
- console.log(' 1. Publish covenant and transfer transactions to BSV blockchain')
494
- console.log(' 2. Store token data in chosen registry/database system')
495
- console.log(' 3. Build user interfaces for token management')
496
- console.log(' 4. Implement business logic for legal workflows')
497
- console.log('')
498
- console.log('🚀 This demonstrates SmartLedger-BSV as the perfect foundation')
499
- console.log(' for any Legal Token Protocol application with maximum')
500
- console.log(' flexibility and cryptographic correctness!')
501
-
502
- console.log('')
503
- console.log('📊 FINAL RESULTS SUMMARY:')
504
- console.log('=========================')
505
- console.log(`🏠 Property Right Token: ${rightTokenPrep.tokenId}`)
506
- console.log(`💰 Obligation Token: ${obligationTokenPrep.tokenId}`)
507
- console.log(`⛓️ Covenant Address: ${covenantAddress.toString()}`)
508
- console.log(`🔄 Transfer TX: ${transferTx.id}`)
509
- console.log(`👤 New Owner: ${newOwnerPrivateKey.toAddress()}`)
510
- console.log('')
511
- console.log('All data structures prepared and ready for external system integration! 🎉')
package/shamir_demo.js DELETED
@@ -1,121 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * BSV Shamir Secret Sharing Demo
5
- *
6
- * This demonstrates how to use Shamir Secret Sharing for secure secret distribution
7
- * Perfect for backup keys, passwords, or any sensitive data that needs to be distributed
8
- * across multiple parties with threshold security.
9
- */
10
-
11
- 'use strict'
12
-
13
- var bsv = require('./index.js')
14
-
15
- console.log('🔐 BSV Shamir Secret Sharing Demo')
16
- console.log('=====================================\n')
17
-
18
- // Example 1: Basic secret sharing
19
- console.log('📝 Example 1: Basic Secret Sharing')
20
- console.log('----------------------------------')
21
-
22
- var secret = 'my-super-secret-bitcoin-private-key'
23
- var threshold = 3 // Need at least 3 shares to reconstruct
24
- var totalShares = 5 // Create 5 total shares
25
-
26
- console.log('Secret to protect:', secret)
27
- console.log('Security policy: ' + threshold + ' of ' + totalShares + ' shares required\n')
28
-
29
- // Split the secret
30
- var shares = bsv.Shamir.split(secret, threshold, totalShares)
31
- console.log('✅ Secret split into', shares.length, 'shares')
32
-
33
- // Display share information (truncated for security)
34
- shares.forEach(function(share, index) {
35
- console.log(' Share ' + (index + 1) + ': ID=' + share.id + ', bytes=' + share.length)
36
- })
37
-
38
- // Reconstruct with minimum shares (3 of 5)
39
- console.log('\n🔓 Reconstructing with shares 1, 3, and 5...')
40
- var selectedShares = [shares[0], shares[2], shares[4]] // shares 1, 3, 5
41
- var reconstructed = bsv.Shamir.combine(selectedShares)
42
- var reconstructedSecret = reconstructed.toString('utf8')
43
-
44
- console.log('Reconstructed secret:', reconstructedSecret)
45
- console.log('Match original:', reconstructedSecret === secret ? '✅ YES' : '❌ NO')
46
-
47
- // Example 2: Bitcoin wallet backup scenario
48
- console.log('\n\n💰 Example 2: Bitcoin Wallet Backup Scenario')
49
- console.log('---------------------------------------------')
50
-
51
- var walletMnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'
52
- var backupPolicy = { threshold: 2, shares: 3 } // 2-of-3 backup
53
-
54
- console.log('Wallet mnemonic (12 words):', walletMnemonic.split(' ').slice(0, 3).join(' ') + '...')
55
- console.log('Backup policy: ' + backupPolicy.threshold + ' of ' + backupPolicy.shares + ' shares needed\n')
56
-
57
- var walletShares = bsv.Shamir.split(walletMnemonic, backupPolicy.threshold, backupPolicy.shares)
58
-
59
- console.log('📋 Backup shares created:')
60
- walletShares.forEach(function(share, index) {
61
- var label = ['👤 Family Member', '🏦 Bank Safe', '☁️ Cloud Storage'][index]
62
- console.log(' Share ' + (index + 1) + ': ' + label + ' (ID: ' + share.id + ')')
63
- })
64
-
65
- // Simulate recovery with 2 shares
66
- console.log('\n🔧 Simulating wallet recovery with shares from Family Member + Bank Safe...')
67
- var recoveryShares = [walletShares[0], walletShares[1]] // First 2 shares
68
- var recoveredMnemonic = bsv.Shamir.combine(recoveryShares).toString('utf8')
69
-
70
- console.log('Recovered mnemonic:', recoveredMnemonic === walletMnemonic ? '✅ SUCCESS' : '❌ FAILED')
71
-
72
- // Example 3: Binary data (keys, certificates, etc.)
73
- console.log('\n\n🔑 Example 3: Binary Data Protection')
74
- console.log('-----------------------------------')
75
-
76
- var binarySecret = Buffer.from([0x04, 0x8f, 0xab, 0x23, 0xc1, 0x9e, 0x77, 0x44]) // Example key bytes
77
- console.log('Binary secret (hex):', binarySecret.toString('hex'))
78
- console.log('Binary secret length:', binarySecret.length, 'bytes\n')
79
-
80
- var binaryShares = bsv.Shamir.split(binarySecret, 2, 4)
81
- console.log('✅ Binary data split into', binaryShares.length, 'shares')
82
-
83
- var recoveredBinary = bsv.Shamir.combine(binaryShares.slice(0, 2))
84
- console.log('Recovered binary (hex):', recoveredBinary.toString('hex'))
85
- console.log('Binary match:', Buffer.compare(binarySecret, recoveredBinary) === 0 ? '✅ YES' : '❌ NO')
86
-
87
- // Example 4: Share verification
88
- console.log('\n\n🔍 Example 4: Share Verification')
89
- console.log('--------------------------------')
90
-
91
- var testShares = bsv.Shamir.split('verification-test', 2, 3)
92
- console.log('Testing share integrity...')
93
-
94
- testShares.forEach(function(share, index) {
95
- var isValid = bsv.Shamir.verifyShare(share)
96
- console.log(' Share ' + (index + 1) + ':', isValid ? '✅ Valid' : '❌ Invalid')
97
- })
98
-
99
- // Test with corrupted share
100
- var corruptedShare = JSON.parse(JSON.stringify(testShares[0]))
101
- corruptedShare.bytes[0].y = 'invalid-hex' // Corrupt the data
102
- console.log(' Corrupted share:', bsv.Shamir.verifyShare(corruptedShare) ? '❌ Invalid test failed' : '✅ Correctly rejected')
103
-
104
- console.log('\n🎯 Use Cases for Shamir Secret Sharing:')
105
- console.log('--------------------------------------')
106
- console.log('• 🔐 Bitcoin wallet backup (split mnemonic across family/friends)')
107
- console.log('• 🏢 Corporate key management (distribute signing keys)')
108
- console.log('• 🛡️ Multi-party authentication (API keys, passwords)')
109
- console.log('• 💾 Secure data backup (encrypt once, distribute shares)')
110
- console.log('• 🤝 Trustless escrow (require multiple parties to unlock)')
111
- console.log('• 🏦 Bank vault security (multiple keyholders required)')
112
-
113
- console.log('\n📦 Integration Options:')
114
- console.log('----------------------')
115
- console.log('• Main library: bsv.Shamir or bsv.crypto.Shamir')
116
- console.log('• Standalone: bsv-shamir.min.js (433 KB)')
117
- console.log('• CDN ready: Use in browser with <script> tag')
118
- console.log('• Node.js: require("smartledger-bsv").Shamir')
119
-
120
- console.log('\n✨ Demo completed successfully!')
121
- console.log('Visit: https://github.com/codenlighten/smartledger-bsv for more examples')