@tari-project/tarijs 0.10.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +127 -67
- package/TODO.md +91 -3
- package/docusaurus/tari-docs/README.md +200 -17
- package/docusaurus/tari-docs/docs/api-reference.md +665 -0
- package/docusaurus/tari-docs/docs/contributing.md +619 -0
- package/docusaurus/tari-docs/docs/guides/getting-started-tutorial.md +965 -0
- package/docusaurus/tari-docs/docs/guides/production-deployment.md +977 -0
- package/docusaurus/tari-docs/docs/index.md +114 -11
- package/docusaurus/tari-docs/docs/installation.md +142 -1
- package/docusaurus/tari-docs/docs/signers/metamask.md +529 -0
- package/docusaurus/tari-docs/docs/troubleshooting.md +661 -0
- package/docusaurus/tari-docs/package.json +1 -1
- package/examples/vite-typescript-react/README.md +9 -0
- package/examples/vite-typescript-react/eslint.config.js +23 -0
- package/examples/vite-typescript-react/index.html +13 -0
- package/examples/vite-typescript-react/package.json +35 -0
- package/examples/vite-typescript-react/public/vite.svg +1 -0
- package/examples/vite-typescript-react/src/App.css +42 -0
- package/examples/vite-typescript-react/src/App.tsx +50 -0
- package/examples/vite-typescript-react/src/assets/react.svg +1 -0
- package/examples/vite-typescript-react/src/index.css +68 -0
- package/examples/vite-typescript-react/src/main.tsx +10 -0
- package/examples/vite-typescript-react/src/vite-env.d.ts +1 -0
- package/examples/vite-typescript-react/tsconfig.app.json +27 -0
- package/examples/vite-typescript-react/tsconfig.json +7 -0
- package/examples/vite-typescript-react/tsconfig.node.json +25 -0
- package/examples/vite-typescript-react/vite.config.ts +7 -0
- package/package.json +2 -2
- package/packages/builders/package.json +2 -2
- package/packages/builders/src/transaction/TransactionBuilder.ts +4 -12
- package/packages/indexer_provider/package.json +2 -2
- package/packages/indexer_provider/src/provider.ts +5 -5
- package/packages/indexer_provider/tsconfig.json +4 -2
- package/packages/metamask_signer/package.json +2 -2
- package/packages/metamask_signer/src/index.ts +2 -14
- package/packages/{tari_permissions → permissions}/package.json +2 -2
- package/packages/{tari_permissions → permissions}/src/helpers.ts +1 -1
- package/packages/permissions/src/index.ts +2 -0
- package/packages/{tari_permissions/src/tari_permissions.ts → permissions/src/permissions.ts} +56 -6
- package/packages/react-mui-connect-button/moon.yml +71 -0
- package/packages/react-mui-connect-button/package.json +40 -0
- package/packages/react-mui-connect-button/src/Logos.tsx +60 -0
- package/packages/react-mui-connect-button/src/TariConnectButton.tsx +51 -0
- package/packages/react-mui-connect-button/src/TariWalletSelectionDialog.tsx +116 -0
- package/packages/react-mui-connect-button/src/content/tari-logo-white.svg +18 -0
- package/packages/react-mui-connect-button/src/content/tari-logo.svg +18 -0
- package/packages/react-mui-connect-button/src/content/walletconnect-logo.svg +13 -0
- package/packages/react-mui-connect-button/src/defaultPermissions.ts +0 -0
- package/packages/react-mui-connect-button/src/index.ts +24 -0
- package/packages/react-mui-connect-button/tsconfig.json +31 -0
- package/packages/tari_provider/package.json +2 -2
- package/packages/tari_signer/package.json +2 -2
- package/packages/tari_universe/package.json +2 -2
- package/packages/tari_universe/tsconfig.json +4 -2
- package/packages/tarijs/package.json +2 -2
- package/packages/tarijs/tsconfig.json +4 -2
- package/packages/tarijs_types/package.json +2 -2
- package/packages/wallet_daemon/package.json +2 -2
- package/packages/wallet_daemon/src/provider.ts +8 -6
- package/packages/wallet_daemon/src/signer.ts +11 -6
- package/packages/wallet_daemon/tsconfig.json +1 -1
- package/packages/walletconnect/package.json +3 -2
- package/packages/walletconnect/src/index.ts +52 -26
- package/packages/walletconnect/tsconfig.json +3 -0
- package/pnpm-workspace.yaml +15 -7
- package/scripts/check_versions.sh +4 -0
- package/scripts/clean_everything.sh +38 -0
- package/tsconfig.json +6 -0
- package/packages/tari_permissions/src/index.ts +0 -2
- /package/packages/{tari_permissions → permissions}/moon.yml +0 -0
- /package/packages/{tari_permissions → permissions}/tsconfig.json +0 -0
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 12
|
|
3
|
+
title: Contributing
|
|
4
|
+
description: Join the tari.js community! Learn how to contribute code, documentation, and ideas to make tari.js better for everyone.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Contributing to tari.js 🤝
|
|
8
|
+
|
|
9
|
+
> **Welcome, builder!** We're thrilled you want to contribute to tari.js. Whether you're fixing bugs, adding features, improving docs, or sharing ideas — every contribution makes the Tari ecosystem stronger.
|
|
10
|
+
|
|
11
|
+
We welcome contributions to tari.js! This guide will help you get started with contributing to the project, whether you're fixing bugs, adding features, improving documentation, or helping with testing.
|
|
12
|
+
|
|
13
|
+
## 🌟 **Ways to Contribute**
|
|
14
|
+
|
|
15
|
+
### 🛠️ **Code Contributions**
|
|
16
|
+
- **🐛 Fix bugs** — Help resolve issues and improve stability
|
|
17
|
+
- **✨ Add features** — Implement new functionality and enhancements
|
|
18
|
+
- **🔧 Optimize performance** — Make tari.js faster and more efficient
|
|
19
|
+
- **🧪 Write tests** — Improve code coverage and reliability
|
|
20
|
+
|
|
21
|
+
### 📚 **Documentation**
|
|
22
|
+
- **📝 Improve guides** — Make tutorials clearer and more helpful
|
|
23
|
+
- **📖 Add examples** — Show real-world usage patterns
|
|
24
|
+
- **🎥 Create tutorials** — Video guides and walkthroughs
|
|
25
|
+
- **🌐 Translate content** — Help make tari.js globally accessible
|
|
26
|
+
|
|
27
|
+
### 💡 **Ideas & Feedback**
|
|
28
|
+
- **💭 Share use cases** — Tell us how you're using tari.js
|
|
29
|
+
- **🗳️ Vote on features** — Help prioritize development
|
|
30
|
+
- **🎯 Request features** — Suggest improvements and new capabilities
|
|
31
|
+
- **🐛 Report bugs** — Help us find and fix issues
|
|
32
|
+
|
|
33
|
+
## 🚀 Quick Start
|
|
34
|
+
|
|
35
|
+
### Prerequisites
|
|
36
|
+
|
|
37
|
+
Before contributing, ensure you have:
|
|
38
|
+
|
|
39
|
+
- **Node.js 18+** and **pnpm** installed
|
|
40
|
+
- **Git** for version control
|
|
41
|
+
- **tari-ootle** repository cloned at the same folder level as tari.js
|
|
42
|
+
- Basic knowledge of **TypeScript**, **React**, and **blockchain concepts**
|
|
43
|
+
|
|
44
|
+
### Development Setup
|
|
45
|
+
|
|
46
|
+
1. **Fork and Clone**
|
|
47
|
+
```bash
|
|
48
|
+
# Fork the repository on GitHub, then:
|
|
49
|
+
git clone https://github.com/YOUR-USERNAME/tari.js.git
|
|
50
|
+
cd tari.js
|
|
51
|
+
|
|
52
|
+
# Add upstream remote
|
|
53
|
+
git remote add upstream https://github.com/tari-project/tari.js.git
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
2. **Install Dependencies**
|
|
57
|
+
```bash
|
|
58
|
+
pnpm install
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
3. **Build the Project**
|
|
62
|
+
```bash
|
|
63
|
+
moon tarijs:build
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
4. **Run Tests**
|
|
67
|
+
```bash
|
|
68
|
+
moon :test
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
5. **Start Documentation Site**
|
|
72
|
+
```bash
|
|
73
|
+
moon tari-docs:start
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 📋 Development Workflow
|
|
77
|
+
|
|
78
|
+
### Branch Strategy
|
|
79
|
+
|
|
80
|
+
We use a **feature branch workflow**:
|
|
81
|
+
|
|
82
|
+
- `main` - Production-ready code
|
|
83
|
+
- `develop` - Integration branch for features
|
|
84
|
+
- `feature/feature-name` - Individual features
|
|
85
|
+
- `bugfix/bug-description` - Bug fixes
|
|
86
|
+
- `docs/documentation-updates` - Documentation changes
|
|
87
|
+
|
|
88
|
+
### Creating a Feature Branch
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Update your fork
|
|
92
|
+
git checkout main
|
|
93
|
+
git pull upstream main
|
|
94
|
+
|
|
95
|
+
# Create feature branch
|
|
96
|
+
git checkout -b feature/your-feature-name
|
|
97
|
+
|
|
98
|
+
# Make your changes...
|
|
99
|
+
git add .
|
|
100
|
+
git commit -m "feat: add new wallet integration"
|
|
101
|
+
|
|
102
|
+
# Push to your fork
|
|
103
|
+
git push origin feature/your-feature-name
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Commit Message Format
|
|
107
|
+
|
|
108
|
+
We follow the [Conventional Commits](https://www.conventionalcommits.org/) specification:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
type(scope): brief description
|
|
112
|
+
|
|
113
|
+
[optional body]
|
|
114
|
+
|
|
115
|
+
[optional footer]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Types:**
|
|
119
|
+
- `feat`: New feature
|
|
120
|
+
- `fix`: Bug fix
|
|
121
|
+
- `docs`: Documentation changes
|
|
122
|
+
- `style`: Code style changes (formatting, etc.)
|
|
123
|
+
- `refactor`: Code refactoring
|
|
124
|
+
- `test`: Adding or updating tests
|
|
125
|
+
- `chore`: Maintenance tasks
|
|
126
|
+
|
|
127
|
+
**Examples:**
|
|
128
|
+
```bash
|
|
129
|
+
feat(signer): add TariUniverse wallet integration
|
|
130
|
+
fix(provider): handle connection timeout properly
|
|
131
|
+
docs(api): update TransactionBuilder examples
|
|
132
|
+
test(integration): add end-to-end wallet tests
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 🛠️ Project Structure
|
|
136
|
+
|
|
137
|
+
### Monorepo Organization
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
tari.js/
|
|
141
|
+
├── packages/
|
|
142
|
+
│ ├── tarijs/ # Main package (aggregates all functionality)
|
|
143
|
+
│ ├── tari_provider/ # Base provider interface
|
|
144
|
+
│ ├── tari_signer/ # Base signer interface
|
|
145
|
+
│ ├── indexer_provider/ # Indexer provider implementation
|
|
146
|
+
│ ├── wallet_daemon/ # Wallet daemon integration
|
|
147
|
+
│ ├── metamask_signer/ # MetaMask integration
|
|
148
|
+
│ ├── tari_universe/ # Tari Universe wallet integration
|
|
149
|
+
│ ├── walletconnect/ # WalletConnect integration
|
|
150
|
+
│ ├── builders/ # Transaction building utilities
|
|
151
|
+
│ ├── tarijs_types/ # Shared TypeScript types
|
|
152
|
+
│ └── tari_permissions/ # Permission system
|
|
153
|
+
├── docusaurus/ # Documentation website
|
|
154
|
+
├── scripts/ # Build and utility scripts
|
|
155
|
+
└── .github/ # CI/CD workflows
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Package Development
|
|
159
|
+
|
|
160
|
+
Each package follows a consistent structure:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
packages/package-name/
|
|
164
|
+
├── src/
|
|
165
|
+
│ ├── index.ts # Public API exports
|
|
166
|
+
│ ├── types.ts # Package-specific types
|
|
167
|
+
│ └── [implementation files]
|
|
168
|
+
├── test/
|
|
169
|
+
│ ├── unit-tests/ # Unit tests
|
|
170
|
+
│ └── integration-tests/ # Integration tests
|
|
171
|
+
├── package.json # Package configuration
|
|
172
|
+
├── tsconfig.json # TypeScript configuration
|
|
173
|
+
└── moon.yml # Moon task configuration
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## 🧪 Testing Guidelines
|
|
177
|
+
|
|
178
|
+
### Test Types
|
|
179
|
+
|
|
180
|
+
1. **Unit Tests** - Test individual functions and classes
|
|
181
|
+
2. **Integration Tests** - Test package interactions
|
|
182
|
+
3. **End-to-End Tests** - Test complete user workflows
|
|
183
|
+
|
|
184
|
+
### Writing Tests
|
|
185
|
+
|
|
186
|
+
We use **Vitest** for testing. Test files should be co-located with source files or in dedicated test directories.
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
// Example unit test
|
|
190
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
191
|
+
import { TransactionBuilder } from '../src/TransactionBuilder';
|
|
192
|
+
|
|
193
|
+
describe('TransactionBuilder', () => {
|
|
194
|
+
let builder: TransactionBuilder;
|
|
195
|
+
|
|
196
|
+
beforeEach(() => {
|
|
197
|
+
builder = new TransactionBuilder(Network.LocalNet);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it('should set fee correctly', () => {
|
|
201
|
+
const transaction = builder
|
|
202
|
+
.fee(100)
|
|
203
|
+
.build();
|
|
204
|
+
|
|
205
|
+
expect(transaction.feeInstructions).toContain(
|
|
206
|
+
expect.objectContaining({ amount: 100 })
|
|
207
|
+
);
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
it('should throw on invalid fee amount', () => {
|
|
211
|
+
expect(() => builder.fee(-1)).toThrow('Fee must be positive');
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Integration Tests
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// Example integration test
|
|
220
|
+
import { describe, it, expect } from 'vitest';
|
|
221
|
+
import { WalletDaemonTariSigner, IndexerProvider } from '../src';
|
|
222
|
+
|
|
223
|
+
describe('Wallet Integration', () => {
|
|
224
|
+
it('should connect to wallet daemon and submit transaction', async () => {
|
|
225
|
+
const signer = new WalletDaemonTariSigner({
|
|
226
|
+
endpoint: 'http://localhost:18103'
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
const provider = new IndexerProvider({
|
|
230
|
+
endpoint: 'http://localhost:18300'
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Test connection
|
|
234
|
+
expect(signer.isConnected()).toBe(true);
|
|
235
|
+
|
|
236
|
+
// Test account retrieval
|
|
237
|
+
const account = await signer.getAccount();
|
|
238
|
+
expect(account.address).toMatch(/^account_[a-f0-9]{64}$/);
|
|
239
|
+
|
|
240
|
+
// Test transaction submission
|
|
241
|
+
const transaction = new TransactionBuilder()
|
|
242
|
+
.fee(100)
|
|
243
|
+
.createAccount(account.public_key)
|
|
244
|
+
.build();
|
|
245
|
+
|
|
246
|
+
const result = await signer.submitTransaction({ transaction });
|
|
247
|
+
expect(result.transactionId).toBeDefined();
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Running Tests
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# Run all tests
|
|
256
|
+
moon :test
|
|
257
|
+
|
|
258
|
+
# Run tests for specific package
|
|
259
|
+
moon wallet-daemon:test
|
|
260
|
+
|
|
261
|
+
# Run tests in watch mode
|
|
262
|
+
moon wallet-daemon:test -- --watch
|
|
263
|
+
|
|
264
|
+
# Run integration tests only
|
|
265
|
+
moon :test -- --run integration
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## 📝 Documentation Guidelines
|
|
269
|
+
|
|
270
|
+
### Types of Documentation
|
|
271
|
+
|
|
272
|
+
1. **API Documentation** - Generated from TypeScript types and JSDoc
|
|
273
|
+
2. **User Guides** - Step-by-step tutorials and explanations
|
|
274
|
+
3. **Developer Documentation** - Architecture and contributing guides
|
|
275
|
+
4. **Code Comments** - Inline documentation for complex logic
|
|
276
|
+
|
|
277
|
+
### Writing Documentation
|
|
278
|
+
|
|
279
|
+
#### JSDoc Comments
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
/**
|
|
283
|
+
* Submits a transaction to the Tari network
|
|
284
|
+
*
|
|
285
|
+
* @param request - Transaction request containing the transaction and options
|
|
286
|
+
* @param request.transaction - The transaction to submit
|
|
287
|
+
* @param request.is_dry_run - Whether to perform a dry run (default: false)
|
|
288
|
+
* @returns Promise resolving to transaction submission result
|
|
289
|
+
*
|
|
290
|
+
* @throws {ConnectionError} When the wallet is not connected
|
|
291
|
+
* @throws {ValidationError} When the transaction is invalid
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* ```typescript
|
|
295
|
+
* const transaction = new TransactionBuilder()
|
|
296
|
+
* .fee(100)
|
|
297
|
+
* .callMethod(account, 'transfer', { amount: 1000, destination: 'account_...' })
|
|
298
|
+
* .build();
|
|
299
|
+
*
|
|
300
|
+
* const result = await signer.submitTransaction({ transaction });
|
|
301
|
+
* console.log('Transaction ID:', result.transactionId);
|
|
302
|
+
* ```
|
|
303
|
+
*/
|
|
304
|
+
async submitTransaction(request: SubmitTransactionRequest): Promise<SubmitTransactionResponse> {
|
|
305
|
+
// Implementation...
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
#### Markdown Documentation
|
|
310
|
+
|
|
311
|
+
Follow these guidelines for documentation:
|
|
312
|
+
|
|
313
|
+
- **Clear headings** with proper hierarchy
|
|
314
|
+
- **Code examples** for all API methods
|
|
315
|
+
- **Prerequisites** section for setup requirements
|
|
316
|
+
- **Troubleshooting** section for common issues
|
|
317
|
+
- **Cross-references** to related documentation
|
|
318
|
+
|
|
319
|
+
### Documentation Development
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
# Start documentation development server
|
|
323
|
+
moon tari-docs:start
|
|
324
|
+
|
|
325
|
+
# Build documentation
|
|
326
|
+
moon tari-docs:build
|
|
327
|
+
|
|
328
|
+
# Deploy documentation (maintainers only)
|
|
329
|
+
moon tari-docs:deploy
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
## 🔧 Code Style and Standards
|
|
333
|
+
|
|
334
|
+
### TypeScript Standards
|
|
335
|
+
|
|
336
|
+
- **Strict TypeScript** configuration enabled
|
|
337
|
+
- **Explicit types** for public APIs
|
|
338
|
+
- **Interface segregation** principle followed
|
|
339
|
+
- **Consistent naming** conventions
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
// Good: Explicit types and clear naming
|
|
343
|
+
interface WalletConnectionConfig {
|
|
344
|
+
endpoint: string;
|
|
345
|
+
timeout?: number;
|
|
346
|
+
retryAttempts?: number;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
class WalletService {
|
|
350
|
+
async connect(config: WalletConnectionConfig): Promise<TariSigner> {
|
|
351
|
+
// Implementation with proper error handling
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Avoid: Any types and unclear naming
|
|
356
|
+
class Service {
|
|
357
|
+
async connect(config: any): Promise<any> {
|
|
358
|
+
// Implementation
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Code Formatting
|
|
364
|
+
|
|
365
|
+
We use **Prettier** for code formatting:
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
# Format all files
|
|
369
|
+
pnpm run format
|
|
370
|
+
|
|
371
|
+
# Check formatting
|
|
372
|
+
pnpm run format:check
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Linting
|
|
376
|
+
|
|
377
|
+
We use **ESLint** for code quality:
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
# Lint all files
|
|
381
|
+
pnpm run lint
|
|
382
|
+
|
|
383
|
+
# Fix linting issues
|
|
384
|
+
pnpm run lint:fix
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Import Organization
|
|
388
|
+
|
|
389
|
+
```typescript
|
|
390
|
+
// 1. Node.js built-ins
|
|
391
|
+
import { readFileSync } from 'fs';
|
|
392
|
+
|
|
393
|
+
// 2. External packages
|
|
394
|
+
import React from 'react';
|
|
395
|
+
import { describe, it, expect } from 'vitest';
|
|
396
|
+
|
|
397
|
+
// 3. Internal packages (monorepo)
|
|
398
|
+
import { TariSigner } from '@tari-project/tari-signer';
|
|
399
|
+
import { TransactionBuilder } from '@tari-project/builders';
|
|
400
|
+
|
|
401
|
+
// 4. Relative imports
|
|
402
|
+
import { validateAddress } from '../utils/validation';
|
|
403
|
+
import { ConnectionError } from './errors';
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## 🐛 Bug Reports and Feature Requests
|
|
407
|
+
|
|
408
|
+
### Reporting Bugs
|
|
409
|
+
|
|
410
|
+
When reporting bugs, include:
|
|
411
|
+
|
|
412
|
+
1. **Environment Information**
|
|
413
|
+
- OS and browser version
|
|
414
|
+
- Node.js and pnpm versions
|
|
415
|
+
- tari.js version
|
|
416
|
+
- Wallet type and version
|
|
417
|
+
|
|
418
|
+
2. **Clear Description**
|
|
419
|
+
- What you expected to happen
|
|
420
|
+
- What actually happened
|
|
421
|
+
- Steps to reproduce
|
|
422
|
+
|
|
423
|
+
3. **Code Examples**
|
|
424
|
+
- Minimal reproduction case
|
|
425
|
+
- Error messages and stack traces
|
|
426
|
+
|
|
427
|
+
4. **Additional Context**
|
|
428
|
+
- Screenshots or videos if applicable
|
|
429
|
+
- Related issues or discussions
|
|
430
|
+
|
|
431
|
+
### Feature Requests
|
|
432
|
+
|
|
433
|
+
For feature requests, provide:
|
|
434
|
+
|
|
435
|
+
1. **Problem Statement** - What problem does this solve?
|
|
436
|
+
2. **Proposed Solution** - How should it work?
|
|
437
|
+
3. **Alternatives** - What other solutions have you considered?
|
|
438
|
+
4. **Use Cases** - Specific scenarios where this would be useful
|
|
439
|
+
|
|
440
|
+
## 🔍 Code Review Process
|
|
441
|
+
|
|
442
|
+
### Submitting Pull Requests
|
|
443
|
+
|
|
444
|
+
1. **Create Feature Branch** from main
|
|
445
|
+
2. **Implement Changes** with tests and documentation
|
|
446
|
+
3. **Run Quality Checks**
|
|
447
|
+
```bash
|
|
448
|
+
pnpm run lint
|
|
449
|
+
pnpm run format:check
|
|
450
|
+
moon :test
|
|
451
|
+
moon :build
|
|
452
|
+
```
|
|
453
|
+
4. **Create Pull Request** with clear description
|
|
454
|
+
5. **Address Review Feedback** promptly
|
|
455
|
+
|
|
456
|
+
### Pull Request Template
|
|
457
|
+
|
|
458
|
+
```markdown
|
|
459
|
+
## Description
|
|
460
|
+
Brief description of changes and motivation.
|
|
461
|
+
|
|
462
|
+
## Type of Change
|
|
463
|
+
- [ ] Bug fix
|
|
464
|
+
- [ ] New feature
|
|
465
|
+
- [ ] Breaking change
|
|
466
|
+
- [ ] Documentation update
|
|
467
|
+
|
|
468
|
+
## Testing
|
|
469
|
+
- [ ] Unit tests pass
|
|
470
|
+
- [ ] Integration tests pass
|
|
471
|
+
- [ ] Manual testing completed
|
|
472
|
+
|
|
473
|
+
## Checklist
|
|
474
|
+
- [ ] Code follows style guidelines
|
|
475
|
+
- [ ] Self-review completed
|
|
476
|
+
- [ ] Documentation updated
|
|
477
|
+
- [ ] No breaking changes (or clearly documented)
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
### Review Criteria
|
|
481
|
+
|
|
482
|
+
Reviewers check for:
|
|
483
|
+
|
|
484
|
+
- **Functionality** - Does it work as intended?
|
|
485
|
+
- **Code Quality** - Is it maintainable and readable?
|
|
486
|
+
- **Performance** - Any performance implications?
|
|
487
|
+
- **Security** - Are there security considerations?
|
|
488
|
+
- **Documentation** - Is it properly documented?
|
|
489
|
+
- **Tests** - Are there adequate tests?
|
|
490
|
+
|
|
491
|
+
## 🏗️ Architecture Guidelines
|
|
492
|
+
|
|
493
|
+
### Design Principles
|
|
494
|
+
|
|
495
|
+
1. **Interface Segregation** - Small, focused interfaces
|
|
496
|
+
2. **Dependency Inversion** - Depend on abstractions, not concretions
|
|
497
|
+
3. **Single Responsibility** - Each class/function has one purpose
|
|
498
|
+
4. **Open/Closed** - Open for extension, closed for modification
|
|
499
|
+
|
|
500
|
+
### Adding New Wallet Integrations
|
|
501
|
+
|
|
502
|
+
To add a new wallet type:
|
|
503
|
+
|
|
504
|
+
1. **Create Package** in `packages/` directory
|
|
505
|
+
2. **Implement TariSigner** interface
|
|
506
|
+
3. **Add Configuration Types** for wallet-specific options
|
|
507
|
+
4. **Write Unit Tests** for all methods
|
|
508
|
+
5. **Add Integration Tests** with actual wallet
|
|
509
|
+
6. **Update Main Package** to export new signer
|
|
510
|
+
7. **Add Documentation** with usage examples
|
|
511
|
+
|
|
512
|
+
```typescript
|
|
513
|
+
// Example new signer implementation
|
|
514
|
+
export class NewWalletSigner implements TariSigner {
|
|
515
|
+
readonly signerName = 'NewWallet';
|
|
516
|
+
|
|
517
|
+
constructor(private config: NewWalletConfig) {
|
|
518
|
+
// Initialize wallet connection
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
isConnected(): boolean {
|
|
522
|
+
// Check connection status
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
async getAccount(): Promise<AccountData> {
|
|
526
|
+
// Implement account retrieval
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
async submitTransaction(request: SubmitTransactionRequest): Promise<SubmitTransactionResponse> {
|
|
530
|
+
// Implement transaction submission
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// ... implement other TariSigner methods
|
|
534
|
+
}
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
## 🤝 Community Guidelines
|
|
538
|
+
|
|
539
|
+
### Communication
|
|
540
|
+
|
|
541
|
+
- **Be respectful** and professional in all interactions
|
|
542
|
+
- **Ask questions** when you need clarification
|
|
543
|
+
- **Provide context** when reporting issues or requesting help
|
|
544
|
+
- **Be patient** with review processes and responses
|
|
545
|
+
|
|
546
|
+
### Getting Help
|
|
547
|
+
|
|
548
|
+
- **GitHub Discussions** - For questions and general discussion
|
|
549
|
+
- **GitHub Issues** - For bug reports and feature requests
|
|
550
|
+
- **Discord** - Real-time chat with the community
|
|
551
|
+
- **Documentation** - Check existing docs before asking
|
|
552
|
+
|
|
553
|
+
### Recognition
|
|
554
|
+
|
|
555
|
+
Contributors are recognized through:
|
|
556
|
+
|
|
557
|
+
- **GitHub Contributors** page
|
|
558
|
+
- **Release Notes** acknowledgments
|
|
559
|
+
- **Community Highlights** in project updates
|
|
560
|
+
|
|
561
|
+
## 🚢 Release Process
|
|
562
|
+
|
|
563
|
+
### Versioning
|
|
564
|
+
|
|
565
|
+
We follow [Semantic Versioning](https://semver.org/):
|
|
566
|
+
|
|
567
|
+
- **MAJOR** version for breaking changes
|
|
568
|
+
- **MINOR** version for new features
|
|
569
|
+
- **PATCH** version for bug fixes
|
|
570
|
+
|
|
571
|
+
### Release Workflow
|
|
572
|
+
|
|
573
|
+
1. **Feature Freeze** - No new features in release branch
|
|
574
|
+
2. **Testing Phase** - Comprehensive testing of release candidate
|
|
575
|
+
3. **Documentation Update** - Update all relevant documentation
|
|
576
|
+
4. **Release Notes** - Document all changes and breaking changes
|
|
577
|
+
5. **Publication** - Publish to npm registry
|
|
578
|
+
6. **Announcement** - Notify community of new release
|
|
579
|
+
|
|
580
|
+
## 📞 Contact and Support
|
|
581
|
+
|
|
582
|
+
### Maintainers
|
|
583
|
+
|
|
584
|
+
- **Core Team** - GitHub: @tari-project/tari-js-maintainers
|
|
585
|
+
- **Documentation** - Contributions welcome via GitHub
|
|
586
|
+
|
|
587
|
+
### Community
|
|
588
|
+
|
|
589
|
+
- **Discord** - [Tari Community Discord](https://discord.gg/tari)
|
|
590
|
+
- **GitHub Discussions** - [tari.js Discussions](https://github.com/tari-project/tari.js/discussions)
|
|
591
|
+
- **Twitter** - [@tari](https://twitter.com/tari)
|
|
592
|
+
|
|
593
|
+
### Reporting Security Issues
|
|
594
|
+
|
|
595
|
+
For security-related issues, please email: security@tari.com
|
|
596
|
+
|
|
597
|
+
Do not report security issues through public GitHub issues.
|
|
598
|
+
|
|
599
|
+
---
|
|
600
|
+
|
|
601
|
+
## 🎉 **Ready to Contribute?**
|
|
602
|
+
|
|
603
|
+
### 🚀 **Quick Start Checklist**
|
|
604
|
+
- [ ] [Set up development environment](#-quick-start)
|
|
605
|
+
- [ ] [Browse good first issues](https://github.com/tari-project/tari.js/labels/good%20first%20issue)
|
|
606
|
+
- [ ] [Join our Discord](https://discord.gg/tari) community
|
|
607
|
+
- [ ] [Read the project roadmap](https://github.com/tari-project/tari.js/blob/main/TODO.md)
|
|
608
|
+
- [ ] [Make your first contribution!](https://github.com/tari-project/tari.js/fork)
|
|
609
|
+
|
|
610
|
+
### 🏆 **Join Our Community of Builders**
|
|
611
|
+
|
|
612
|
+
**Thank you for contributing to tari.js!** Your efforts help make the Tari ecosystem more accessible and robust for everyone. Together, we're building the future of decentralized applications with privacy at the core.
|
|
613
|
+
|
|
614
|
+
- **🌟 Star the repo** to show your support
|
|
615
|
+
- **📢 Share tari.js** with fellow developers
|
|
616
|
+
- **💬 Connect with us** on Discord and GitHub
|
|
617
|
+
- **🚀 Build something amazing** and share it with the community
|
|
618
|
+
|
|
619
|
+
*Happy coding, and welcome to the Tari family!* 🎉
|