smartledger-bsv 3.3.5 → 3.4.4

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 (126) hide show
  1. package/CHANGELOG.md +400 -0
  2. package/README.md +235 -80
  3. package/SECURITY.md +88 -0
  4. package/anchor-entry.js +1 -0
  5. package/bin/cli.js +354 -0
  6. package/bsv-anchor.min.js +12 -0
  7. package/bsv-covenant.min.js +8 -8
  8. package/bsv-didweb.min.js +12 -0
  9. package/bsv-gdaf.min.js +9 -9
  10. package/bsv-ltp.min.js +9 -9
  11. package/bsv-mnemonic.min.js +2 -2
  12. package/bsv-shamir.min.js +3 -3
  13. package/bsv-smartcontract.min.js +9 -9
  14. package/bsv-statuslist.min.js +18 -0
  15. package/bsv-vcjwt.min.js +12 -0
  16. package/bsv.bundle.js +9 -9
  17. package/bsv.d.ts +486 -9
  18. package/bsv.min.js +8 -8
  19. package/build/webpack.anchor.config.js +17 -0
  20. package/build/webpack.didweb.config.js +17 -0
  21. package/build/webpack.statuslist.config.js +17 -0
  22. package/build/webpack.vcjwt.config.js +17 -0
  23. package/didweb-entry.js +1 -0
  24. package/docs/COVENANT_DEVELOPMENT_RESOLVED.md +2 -2
  25. package/docs/MODULE_REFERENCE_COMPLETE.md +61 -58
  26. package/docs/advanced/LEGAL_TOKEN_PROTOCOL.md +3 -3
  27. package/docs/advanced/UTXO_MANAGER_GUIDE.md +1 -1
  28. package/docs/getting-started/INSTALLATION.md +30 -30
  29. package/docs/getting-started/QUICK_START.md +18 -18
  30. package/docs/migration/FROM_BSV_1_5_6.md +16 -10
  31. package/docs/technical/roadmap.md +3 -3
  32. package/gdaf-entry.js +1 -2
  33. package/index.js +68 -9
  34. package/lib/anchor/index.js +102 -0
  35. package/lib/browser-utxo-manager-es5.js +11 -4
  36. package/lib/browser-utxo-manager.js +15 -8
  37. package/lib/didweb/index.js +177 -0
  38. package/lib/ltp/claim.js +1 -0
  39. package/lib/ltp/obligation.js +1 -0
  40. package/lib/ltp/registry.js +2 -0
  41. package/lib/ltp/right.js +1 -0
  42. package/lib/smart_contract/covenant.js +10 -1
  43. package/lib/smartutxo.js +20 -12
  44. package/lib/statuslist/index.js +164 -0
  45. package/lib/transaction/transaction.js +8 -1
  46. package/lib/util/_.js +7 -1
  47. package/lib/vcjwt/index.js +189 -0
  48. package/ltp-entry.js +1 -2
  49. package/package.json +21 -15
  50. package/statuslist-entry.js +1 -0
  51. package/utilities/blockchain-state.js +32 -23
  52. package/vcjwt-entry.js +1 -0
  53. package/demos/README.md +0 -188
  54. package/demos/architecture_demo.js +0 -247
  55. package/demos/browser-test.html +0 -1208
  56. package/demos/bsv_wallet_demo.js +0 -242
  57. package/demos/complete_ltp_demo.js +0 -511
  58. package/demos/debug_tools_demo.js +0 -87
  59. package/demos/demo_features.js +0 -123
  60. package/demos/easy_interface_demo.js +0 -109
  61. package/demos/ecies_demo.js +0 -182
  62. package/demos/gdaf_core_test.js +0 -131
  63. package/demos/gdaf_demo.js +0 -237
  64. package/demos/ltp_demo.js +0 -361
  65. package/demos/ltp_primitives_demo.js +0 -403
  66. package/demos/message_demo.js +0 -209
  67. package/demos/preimage_separation_demo.js +0 -383
  68. package/demos/script_helper_demo.js +0 -289
  69. package/demos/security_demo.js +0 -287
  70. package/demos/shamir_demo.js +0 -121
  71. package/demos/simple_demo.js +0 -204
  72. package/demos/simple_p2pkh_demo.js +0 -169
  73. package/demos/simple_utxo_preimage_demo.js +0 -196
  74. package/demos/smart_contract_demo.html +0 -1347
  75. package/demos/smart_contract_demo.js +0 -910
  76. package/demos/utxo_generator_demo.js +0 -244
  77. package/demos/validation_pipeline_demo.js +0 -155
  78. package/demos/web3keys.html +0 -740
  79. package/examples/README.md +0 -200
  80. package/examples/basic/transaction-creation.js +0 -534
  81. package/examples/basic/transaction_signature_api_gap.js +0 -178
  82. package/examples/complete_workflow_demo.js +0 -783
  83. package/examples/covenants/advanced_covenant_demo.js +0 -219
  84. package/examples/covenants/covenant_interface_demo.js +0 -270
  85. package/examples/covenants/covenant_manual_signature_resolved.js +0 -212
  86. package/examples/covenants/covenant_signature_template.js +0 -117
  87. package/examples/covenants2/covenant_bidirectional_example.js +0 -262
  88. package/examples/covenants2/covenant_utils_demo.js +0 -120
  89. package/examples/covenants2/preimage_covenant_utils.js +0 -287
  90. package/examples/covenants2/production_integration.js +0 -256
  91. package/examples/data/covenant_utxos.json +0 -28
  92. package/examples/data/utxos.json +0 -26
  93. package/examples/definitive_working_demo.js +0 -261
  94. package/examples/final_working_contracts.js +0 -338
  95. package/examples/preimage/README.md +0 -178
  96. package/examples/preimage/extract_preimage_bidirectional.js +0 -421
  97. package/examples/preimage/generate_sample_preimage.js +0 -208
  98. package/examples/preimage/generate_sighash_examples.js +0 -152
  99. package/examples/preimage/parse_preimage.js +0 -117
  100. package/examples/preimage/test_preimage_extractor.js +0 -53
  101. package/examples/preimage/test_varint_extraction.js +0 -95
  102. package/examples/scripts/custom_script_helper_example.js +0 -273
  103. package/examples/scripts/custom_script_signature_test.js +0 -344
  104. package/examples/scripts/script_interpreter.js +0 -193
  105. package/examples/smart_contract/complete_workflow_demo.js +0 -343
  106. package/examples/smart_contract/covenant_builder_demo.js +0 -176
  107. package/examples/smart_contract/script_testing_integration.js +0 -198
  108. package/examples/smart_contract_templates.js +0 -718
  109. package/examples/working_smart_contracts.js +0 -348
  110. package/lib/smart_contract/test_integration.js +0 -269
  111. package/tests/browser-compatibility/README.md +0 -35
  112. package/tests/browser-compatibility/test-cdn-vs-local.html +0 -186
  113. package/tests/browser-compatibility/test-pbkdf2.html +0 -51
  114. package/tests/bundle-completeness-test.html +0 -131
  115. package/tests/bundle-demo.html +0 -476
  116. package/tests/smartcontract-test.html +0 -239
  117. package/tests/standalone-modules-test.html +0 -260
  118. package/tests/test.html +0 -612
  119. package/tests/test_builtin_verify.js +0 -117
  120. package/tests/test_debug_integration.js +0 -71
  121. package/tests/test_ecdsa_little.js +0 -70
  122. package/tests/test_shamir.js +0 -221
  123. package/tests/test_smartverify_der.js +0 -110
  124. package/tests/test_standalone_shamir.html +0 -83
  125. package/tests/unpkg-demo.html +0 -194
  126. package/utilities/blockchain-state.json +0 -118565
@@ -1,219 +0,0 @@
1
- /**
2
- * Advanced Covenant Interface Demonstration
3
- *
4
- * This demo showcases the enhanced covenant interface that combines:
5
- * 1. Detailed BIP143 preimage parsing and validation
6
- * 2. nChain PUSHTX techniques for in-script signature generation
7
- * 3. Perpetually Enforcing Locking Scripts (PELS)
8
- * 4. Advanced covenant patterns for BSV development
9
- *
10
- * Based on specifications from:
11
- * - BIP143 sighash preimage structure
12
- * - nChain white paper WP1605: PUSHTX and Its Building Blocks
13
- */
14
-
15
- const bsv = require('../index.js');
16
- const { CovenantInterface } = require('./lib/covenant-interface.js');
17
-
18
- console.log('='.repeat(80));
19
- console.log('ADVANCED COVENANT INTERFACE DEMONSTRATION');
20
- console.log('Combining BIP143 Preimage Parsing + nChain PUSHTX Techniques');
21
- console.log('='.repeat(80));
22
-
23
- // Initialize the enhanced covenant interface
24
- const covenantInterface = new CovenantInterface();
25
-
26
- // Test 1: Enhanced preimage parsing with BIP143 specifications
27
- console.log('\n1. ENHANCED PREIMAGE PARSING (BIP143 Compliant)');
28
- console.log('-'.repeat(60));
29
-
30
- try {
31
- // Create a test transaction for preimage generation
32
- const testTx = new bsv.Transaction()
33
- .from({
34
- txId: '88b9d41101a4c064b283f80ca73837d96f974bc3fbe931b35db7bca8370cca34',
35
- outputIndex: 0,
36
- script: '76a914751e76e8199196d454941c45d1b3a323f1433bd688ac',
37
- satoshis: 4999999388
38
- })
39
- .to('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa', 4999998876);
40
-
41
- // Generate preimage using BSV library
42
- const lockingScript = bsv.Script.fromHex('76a914751e76e8199196d454941c45d1b3a323f1433bd688ac');
43
- const satoshis = 4999999388;
44
- const sighashType = bsv.crypto.Signature.SIGHASH_ALL | bsv.crypto.Signature.SIGHASH_FORKID;
45
-
46
- console.log('✓ Test transaction created');
47
- console.log(` - Input TXID: ${testTx.inputs[0].prevTxId}`);
48
- console.log(` - Output value: ${testTx.outputs[0].satoshis} satoshis`);
49
- console.log(` - Sighash type: 0x${sighashType.toString(16)}`);
50
-
51
- } catch (error) {
52
- console.log('⚠ Preimage demonstration (requires transaction context)');
53
- console.log(' Enhanced preimage parsing includes:');
54
- console.log(' - Field-by-field BIP143 structure validation');
55
- console.log(' - Proper endianness handling (little-endian fields)');
56
- console.log(' - Variable-length field parsing (scriptCode)');
57
- console.log(' - Comprehensive 108+ byte preimage validation');
58
- console.log(' - Direct field access (nVersion, hashPrevouts, etc.)');
59
- }
60
-
61
- // Test 2: PUSHTX Covenant Creation
62
- console.log('\n2. PUSHTX COVENANT CREATION (nChain WP1605)');
63
- console.log('-'.repeat(60));
64
-
65
- try {
66
- // Create PUSHTX covenant using nChain techniques
67
- const pushtxCovenant = covenantInterface.createAdvancedCovenant('pushtx', {
68
- publicKey: '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
69
- enforceOutputs: true,
70
- sighashType: 0x41 // SIGHASH_ALL | SIGHASH_FORKID
71
- });
72
-
73
- console.log('✓ PUSHTX covenant created successfully');
74
- console.log(` - Script length: ${pushtxCovenant.toBuffer().length} bytes`);
75
- console.log(` - Script hex: ${pushtxCovenant.toHex().substring(0, 80)}...`);
76
- console.log(' - Features: In-script signature generation, message construction');
77
- console.log(' - Optimization: k=a=1 (generator point as public key)');
78
- console.log(' - Security: DER canonicalization prevents malleability');
79
-
80
- } catch (error) {
81
- console.error('✗ PUSHTX covenant creation failed:', error.message);
82
- }
83
-
84
- // Test 3: Perpetually Enforcing Locking Script (PELS)
85
- console.log('\n3. PERPETUALLY ENFORCING LOCKING SCRIPT (PELS)');
86
- console.log('-'.repeat(60));
87
-
88
- try {
89
- // Create PELS that enforces same script and value minus fees
90
- const pels = covenantInterface.createAdvancedCovenant('perpetual', {
91
- publicKeyHash: '751e76e8199196d454941c45d1b3a323f1433bd6',
92
- feeDeduction: 512, // Deduct 512 satoshis per transaction
93
- enforceScript: true,
94
- enforceValue: true
95
- });
96
-
97
- console.log('✓ PELS (Perpetual Covenant) created successfully');
98
- console.log(` - Script length: ${pels.toBuffer().length} bytes`);
99
- console.log(' - Enforcement: Same locking script + fee-adjusted value');
100
- console.log(' - Fee model: 512 satoshi deduction per spend');
101
- console.log(' - Perpetual: All future transactions must follow rules');
102
- console.log(' - Use case: Certificate authority attestation chains');
103
-
104
- } catch (error) {
105
- console.error('✗ PELS creation failed:', error.message);
106
- }
107
-
108
- // Test 4: Transaction Introspection Covenant
109
- console.log('\n4. TRANSACTION INTROSPECTION COVENANT');
110
- console.log('-'.repeat(60));
111
-
112
- try {
113
- // Create covenant that analyzes transaction structure via preimage
114
- const introspectionCovenant = covenantInterface.createAdvancedCovenant('introspection', {
115
- validateInputs: false,
116
- validateOutputs: true,
117
- validateSequence: false,
118
- validateLocktime: false
119
- });
120
-
121
- console.log('✓ Introspection covenant created successfully');
122
- console.log(` - Script length: ${introspectionCovenant.toBuffer().length} bytes`);
123
- console.log(' - Analysis: Output validation via preimage parsing');
124
- console.log(' - Fields: Selective validation of transaction components');
125
- console.log(' - Application: Complex multi-party validation rules');
126
-
127
- } catch (error) {
128
- console.error('✗ Introspection covenant creation failed:', error.message);
129
- }
130
-
131
- // Test 5: Enhanced Covenant Transaction Wrapper
132
- console.log('\n5. ENHANCED COVENANT TRANSACTION WRAPPER');
133
- console.log('-'.repeat(60));
134
-
135
- try {
136
- // Create covenant transaction with enhanced methods
137
- const covenantTx = covenantInterface.createCovenantTransaction({
138
- inputs: [],
139
- outputs: [{
140
- address: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa',
141
- satoshis: 1000000
142
- }]
143
- });
144
-
145
- console.log('✓ Enhanced covenant transaction created');
146
- console.log(' - Features: Preimage caching, enhanced error reporting');
147
- console.log(' - Methods: getPreimage(), signInput(), verify()');
148
- console.log(' - Integration: Works with existing BSV transaction API');
149
- console.log(' - Dual-level: High-level abstractions + granular control');
150
-
151
- } catch (error) {
152
- console.error('✗ Covenant transaction creation failed:', error.message);
153
- }
154
-
155
- // Test 6: Comprehensive Technical Specifications
156
- console.log('\n6. TECHNICAL SPECIFICATIONS SUMMARY');
157
- console.log('-'.repeat(60));
158
-
159
- console.log('BIP143 Preimage Structure (Enhanced Parsing):');
160
- console.log(' • nVersion (4 bytes, little-endian) + value accessor');
161
- console.log(' • hashPrevouts (32 bytes) - double SHA256 of input outpoints');
162
- console.log(' • hashSequence (32 bytes) - double SHA256 of input sequences');
163
- console.log(' • outpoint (36 bytes) - prevTxId + outputIndex with accessors');
164
- console.log(' • scriptCode (variable) - proper varint length parsing');
165
- console.log(' • amount (8 bytes, little-endian) + BigInt value accessor');
166
- console.log(' • nSequence (4 bytes, little-endian) + value accessor');
167
- console.log(' • hashOutputs (32 bytes) - double SHA256 of all outputs');
168
- console.log(' • nLockTime (4 bytes, little-endian) + value accessor');
169
- console.log(' • sighashType (4 bytes, little-endian) + value accessor');
170
- console.log(' • Validation: 108+ byte structure validation');
171
-
172
- console.log('\nnChain PUSHTX Techniques (WP1605 Implementation):');
173
- console.log(' • In-script signature generation: s = z + Gx mod n');
174
- console.log(' • Generator optimization: k=a=1 for efficiency');
175
- console.log(' • DER canonicalization: s <= n/2 prevents malleability');
176
- console.log(' • Message construction: BIP143 preimage building');
177
- console.log(' • Security proof: Computationally infeasible to forge');
178
- console.log(' • Fixed parameters: public key, ephemeral key, sighash flag');
179
-
180
- console.log('\nAdvanced Covenant Patterns:');
181
- console.log(' • PUSHTX: Basic transaction introspection capability');
182
- console.log(' • PELS: Perpetually enforcing locking scripts');
183
- console.log(' • Introspection: Selective transaction field validation');
184
- console.log(' • Optimization: Alt stack usage, endianness reversal');
185
- console.log(' • Fee management: Configurable deduction per spend');
186
- console.log(' • Transaction size: ~1KB for optimized PELS implementation');
187
-
188
- // Test 7: Developer Usage Examples
189
- console.log('\n7. DEVELOPER USAGE EXAMPLES');
190
- console.log('-'.repeat(60));
191
-
192
- console.log('Basic PUSHTX Usage:');
193
- console.log('```javascript');
194
- console.log('const covenant = new CovenantInterface();');
195
- console.log('const pushtx = covenant.createAdvancedCovenant("pushtx", {');
196
- console.log(' publicKey: "02...", enforceOutputs: true');
197
- console.log('});');
198
- console.log('```');
199
-
200
- console.log('\nPerpetual Covenant Usage:');
201
- console.log('```javascript');
202
- console.log('const pels = covenant.createAdvancedCovenant("perpetual", {');
203
- console.log(' publicKeyHash: "751e...", feeDeduction: 512');
204
- console.log('});');
205
- console.log('```');
206
-
207
- console.log('\nEnhanced Transaction Usage:');
208
- console.log('```javascript');
209
- console.log('const tx = covenant.createCovenantTransaction(config);');
210
- console.log('const preimage = tx.getPreimage(0, script, satoshis);');
211
- console.log('const parsedPreimage = new CovenantPreimage(preimage);');
212
- console.log('console.log(parsedPreimage.amountValue); // BigInt accessor');
213
- console.log('```');
214
-
215
- console.log('\n' + '='.repeat(80));
216
- console.log('ADVANCED COVENANT INTERFACE READY FOR PRODUCTION');
217
- console.log('Features: BIP143 parsing + nChain PUSHTX + PELS + Full BSV API');
218
- console.log('Status: SmartLedger-BSV v3.1.1+ with comprehensive covenant support');
219
- console.log('='.repeat(80));
@@ -1,270 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Covenant Interface Demo - High-Level + Granular Control
5
- *
6
- * Shows how to use the new CovenantInterface alongside the existing BSV API
7
- * for maximum flexibility in covenant development.
8
- */
9
-
10
- const bsv = require('../index.js');
11
- const { CovenantInterface } = require('./lib/covenant-interface.js');
12
-
13
- console.log('🔮 SmartLedger Covenant Interface Demo');
14
- console.log('====================================');
15
- console.log(`BSV Library Version: ${bsv.version}`);
16
- console.log(`Date: ${new Date().toISOString()}\n`);
17
-
18
- // Initialize covenant interface (keeps full BSV access)
19
- const covenant = new CovenantInterface();
20
-
21
- // Test keys
22
- const privateKey1 = new bsv.PrivateKey('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss');
23
- const publicKey1 = privateKey1.publicKey;
24
- const privateKey2 = new bsv.PrivateKey('5Hx15HFGyep2CfPxsJKe2fXJsCVn5DEiyoeGGF6JZjGbTRnqfiD');
25
- const publicKey2 = privateKey2.publicKey;
26
- const privateKey3 = new bsv.PrivateKey(); // Generate random key
27
- const publicKey3 = privateKey3.publicKey;
28
-
29
- console.log('🔧 Test Setup:');
30
- console.log(`Key 1: ${publicKey1.toAddress()}`);
31
- console.log(`Key 2: ${publicKey2.toAddress()}`);
32
- console.log(`Key 3: ${publicKey3.toAddress()}\n`);
33
-
34
- /**
35
- * Example 1: High-Level Covenant Creation with Granular Access
36
- */
37
- async function demoHighLevelCovenant() {
38
- console.log('📝 EXAMPLE 1: High-Level Covenant with Granular Control');
39
- console.log('======================================================');
40
-
41
- // Create UTXO using standard BSV API
42
- const utxo = {
43
- txid: 'a'.repeat(64),
44
- vout: 0,
45
- script: bsv.Script.buildPublicKeyHashOut(publicKey1.toAddress()).toHex(),
46
- satoshis: 100000
47
- };
48
-
49
- // ✨ Use high-level covenant interface
50
- const covenantTx = covenant.createCovenantTransaction({
51
- inputs: [utxo],
52
- outputs: [
53
- { address: publicKey2.toAddress().toString(), satoshis: 99000 }
54
- ],
55
- feePerKb: 10 // Ultra-low fees
56
- });
57
-
58
- // 🔍 Access granular BSV functionality when needed
59
- console.log(`Transaction ID: ${covenantTx.tx.id}`);
60
- console.log(`Fee: ${covenantTx.tx.getFee()} satoshis`);
61
-
62
- // Get preimage using high-level interface
63
- const lockingScript = bsv.Script.fromHex(utxo.script);
64
- const preimage = covenantTx.getPreimage(0, lockingScript, utxo.satoshis);
65
-
66
- console.log(`Preimage: ${preimage.toString().substring(0, 40)}...`);
67
- console.log(`Preimage components available: ✅`);
68
- console.log(`Version: ${preimage.getVersion().toString('hex')}`);
69
- console.log(`Amount: ${preimage.getAmount().readBigUInt64LE(0)} satoshis`);
70
-
71
- // Sign using high-level interface
72
- covenantTx.signInput(0, privateKey1, lockingScript, utxo.satoshis);
73
-
74
- console.log(`Covenant transaction valid: ${covenantTx.verify() ? '✅ YES' : '❌ NO'}`);
75
- console.log(`High-level interface: ✅ WORKING\n`);
76
- }
77
-
78
- /**
79
- * Example 2: Template-Based Escrow Covenant
80
- */
81
- async function demoEscrowCovenant() {
82
- console.log('📝 EXAMPLE 2: Template-Based Escrow Covenant');
83
- console.log('===========================================');
84
-
85
- // ✨ Create escrow using template (high-level)
86
- const escrowScript = covenant.createEscrow(
87
- publicKey1, // buyer
88
- publicKey2, // seller
89
- publicKey3, // arbitrator
90
- 700000 // timelock for refund
91
- );
92
-
93
- console.log(`Escrow script: ${escrowScript.toString()}`);
94
-
95
- const utxo = {
96
- txid: 'b'.repeat(64),
97
- vout: 0,
98
- script: escrowScript.toHex(),
99
- satoshis: 200000
100
- };
101
-
102
- // Create transaction with high-level interface
103
- const escrowTx = covenant.createCovenantTransaction({
104
- inputs: [utxo],
105
- outputs: [
106
- { address: publicKey2.toAddress().toString(), satoshis: 199000 }
107
- ]
108
- });
109
-
110
- // 🔍 Granular control: Manual signature creation for 2-of-3 multisig
111
- const sig1 = covenant.createSignature(escrowTx.tx, privateKey1, 0, escrowScript, utxo.satoshis);
112
- const sig2 = covenant.createSignature(escrowTx.tx, privateKey2, 0, escrowScript, utxo.satoshis);
113
-
114
- // Create custom unlocking script (granular BSV control)
115
- const unlockingScript = new bsv.Script()
116
- .add(bsv.Opcode.OP_0) // CHECKMULTISIG bug
117
- .add(sig1)
118
- .add(sig2)
119
- .add(bsv.Opcode.OP_0); // Choose ELSE branch (multisig, not timelock)
120
-
121
- escrowTx.tx.inputs[0].setScript(unlockingScript);
122
-
123
- // Validate using high-level interface
124
- const validation = covenant.validateCovenant(
125
- escrowTx.tx, 0, unlockingScript, escrowScript
126
- );
127
-
128
- console.log(`Escrow validation: ${validation.toString()}`);
129
- console.log(`Template + granular control: ✅ WORKING\n`);
130
- }
131
-
132
- /**
133
- * Example 3: State Machine Covenant
134
- */
135
- async function demoStateMachine() {
136
- console.log('📝 EXAMPLE 3: State Machine Covenant');
137
- console.log('===================================');
138
-
139
- // Define states for a simple workflow
140
- const states = [
141
- { name: 'PENDING', nextStates: [1, 2] }, // Can go to APPROVED or REJECTED
142
- { name: 'APPROVED', nextStates: [3] }, // Can go to COMPLETED
143
- { name: 'REJECTED', nextStates: [0] }, // Can go back to PENDING
144
- { name: 'COMPLETED', nextStates: [] } // Terminal state
145
- ];
146
-
147
- // ✨ Create state machine using template
148
- const stateMachineScript = covenant.createStateMachine(states, 0, publicKey1);
149
-
150
- console.log(`State machine created: ${stateMachineScript.toString().length} bytes`);
151
- console.log(`Current state: PENDING (0)`);
152
- console.log(`Valid transitions: APPROVED (1), REJECTED (2)`);
153
- console.log(`Template-based covenant: ✅ WORKING\n`);
154
- }
155
-
156
- /**
157
- * Example 4: Full BSV API Access Preserved
158
- */
159
- async function demoGranularAccess() {
160
- console.log('📝 EXAMPLE 4: Full BSV API Access Preserved');
161
- console.log('==========================================');
162
-
163
- // 🔍 Full access to underlying BSV library
164
- console.log(`BSV Library accessible: ${covenant.bsv === bsv ? '✅ YES' : '❌ NO'}`);
165
-
166
- // Create transaction using pure BSV API
167
- const pureBsvTx = new bsv.Transaction()
168
- .from({
169
- txid: 'c'.repeat(64),
170
- vout: 0,
171
- script: bsv.Script.buildPublicKeyHashOut(publicKey1.toAddress()).toHex(),
172
- satoshis: 50000
173
- })
174
- .to(publicKey2.toAddress(), 49000)
175
- .sign(privateKey1);
176
-
177
- console.log(`Pure BSV transaction: ${pureBsvTx.verify() ? '✅ VALID' : '❌ INVALID'}`);
178
-
179
- // Mix covenant interface with BSV API
180
- const mixedSignature = covenant.createSignature(
181
- pureBsvTx,
182
- privateKey1,
183
- 0,
184
- bsv.Script.buildPublicKeyHashOut(publicKey1.toAddress()),
185
- 50000
186
- );
187
-
188
- console.log(`Mixed API signature: ${mixedSignature.length} bytes`);
189
- console.log(`BSV API compatibility: ✅ PRESERVED\n`);
190
- }
191
-
192
- /**
193
- * Example 5: Performance and Flexibility Comparison
194
- */
195
- async function demoComparison() {
196
- console.log('📝 EXAMPLE 5: Interface Comparison');
197
- console.log('=================================');
198
-
199
- // High-level approach
200
- console.time('High-level covenant creation');
201
- const highLevelTx = covenant.createCovenantTransaction({
202
- inputs: [{
203
- txid: 'd'.repeat(64),
204
- vout: 0,
205
- script: bsv.Script.buildPublicKeyHashOut(publicKey1.toAddress()).toHex(),
206
- satoshis: 75000
207
- }],
208
- outputs: [
209
- { address: publicKey2.toAddress().toString(), satoshis: 74000 }
210
- ]
211
- });
212
- console.timeEnd('High-level covenant creation');
213
-
214
- // Granular BSV approach
215
- console.time('Granular BSV creation');
216
- const granularTx = new bsv.Transaction()
217
- .from({
218
- txid: 'd'.repeat(64),
219
- vout: 0,
220
- script: bsv.Script.buildPublicKeyHashOut(publicKey1.toAddress()).toHex(),
221
- satoshis: 75000
222
- })
223
- .to(publicKey2.toAddress(), 74000);
224
- console.timeEnd('Granular BSV creation');
225
-
226
- console.log(`Both approaches available: ✅ YES`);
227
- console.log(`Developer choice preserved: ✅ YES`);
228
- console.log(`No breaking changes: ✅ CONFIRMED\n`);
229
- }
230
-
231
- /**
232
- * Run all demos
233
- */
234
- async function runAllDemos() {
235
- try {
236
- await demoHighLevelCovenant();
237
- await demoEscrowCovenant();
238
- await demoStateMachine();
239
- await demoGranularAccess();
240
- await demoComparison();
241
-
242
- console.log('🎉 COVENANT INTERFACE RESULTS');
243
- console.log('============================');
244
- console.log('✅ High-level covenant interface: WORKING');
245
- console.log('✅ Template-based covenant creation: WORKING');
246
- console.log('✅ Granular BSV API access: PRESERVED');
247
- console.log('✅ Preimage parsing and access: WORKING');
248
- console.log('✅ Mixed API usage: SUPPORTED');
249
- console.log('✅ No breaking changes: CONFIRMED');
250
- console.log('');
251
- console.log('🚀 Best of Both Worlds:');
252
- console.log(' - Simple covenant templates for rapid development');
253
- console.log(' - Full BSV API access for granular control');
254
- console.log(' - Backward compatibility with existing code');
255
- console.log(' - Enhanced preimage parsing and validation');
256
-
257
- } catch (error) {
258
- console.error('❌ Demo failed:', error.message);
259
- }
260
- }
261
-
262
- console.log('🎯 COVENANT INTERFACE PHILOSOPHY');
263
- console.log('===============================');
264
- console.log('✨ High-level abstractions for common patterns');
265
- console.log('🔍 Granular BSV API access when needed');
266
- console.log('🔄 Full backward compatibility');
267
- console.log('📈 Enhanced developer productivity\n');
268
-
269
- // Run the demos
270
- runAllDemos();