# Homework 1: Amendment Status Analysis

[← Back to Amendments I: Lifecycle and Core Protocol Impact](/core-dev-bootcamp.md)

***

### Objective

Analyze in detail the status of an amendment on the XRPL Mainnet, interpret the response fields of the `feature` command, calculate the activation timeline, and assess the protocol impact of the amendment.

**Format**: Written report (Markdown or PDF) with screenshots and code used

***

### Task

Connect to a public XRPL node, choose an amendment, analyze its complete status, and document its impact on the protocol.

#### Requirements

1. **Connection and Discovery**
   * Connect to a public XRPL node (`https://xrplcluster.com/` or `https://s1.ripple.com:51234/`)
   * List all amendments with `feature` (HTTP or CLI)
   * Count how many are enabled, in majority, and voting
   * Document the chosen node and its `server_info` response
2. **Amendment Selection**
   * Choose an amendment **not yet activated** (`enabled: false`) but with votes (`count > 0`)
   * If all are activated on Mainnet, use Testnet/Devnet
   * Query the specific amendment: `rippled feature <HASH>`
   * Capture the complete JSON response
3. **Field Analysis**
   * Interpret each response field:
     * `name`: Name and functionality (search for XLS if available)
     * `count`: Number of validators voting for
     * `validations`: Total number of trusted validators
     * `threshold`: Required threshold (floor(validations \* 0.8))
     * Calculate percentage: `(count / validations) * 100`
     * Verify if `count > threshold` (more than 80%)
     * `majority`: Timestamp if threshold exceeded (convert to UTC date)
     * `enabled`: Is the amendment activated?
     * `supported`: Does the node support this amendment?
4. **Timeline Calculation**
   * If the amendment has a `majority`, calculate the activation date:

     ```python
     from datetime import datetime, timedelta

     def calculate_activation(majority):
         ripple_epoch = datetime(2000, 1, 1)
         majority_dt = ripple_epoch + timedelta(seconds=majority)
         activation_dt = majority_dt + timedelta(weeks=2)
         return {
             'majority_date': majority_dt.isoformat(),
             'activation_date': activation_dt.isoformat()
         }
     ```
   * Create a visual timeline showing: Code Release → Vote → Majority → Activation
5. **Protocol Impact**
   * Search for amendment documentation (XLS, GitHub, XRPL.org)
   * Document:
     * New transaction types introduced
     * New ledger entry types
     * Modifications to consensus rules
     * Impact on applications (wallets, exchanges)
   * Assess risks:
     * Risk for non-updated nodes
     * Dependencies with other amendments
     * Contingency plans if bug discovered post-activation
6. **Pseudo-transaction Search** (Optional)
   * If the amendment has a `majority`, search for the `EnableAmendment` transaction with flag `tfGotMajority` (65536)
   * Use an explorer (Bithomp, XRPScan) or the `ledger` API with the estimated ledger number
   * Document: transaction hash, ledger, flags

***

### Deliverable

Your report must include:

* **Connection**:
  * URL of node used
  * Amendment statistics (total, enabled, in majority, voting)
  * Screenshot of `server_info`
* **Amendment Analysis**:
  * Name and hash of chosen amendment
  * Complete JSON of `feature` response
  * Interpretation table of all fields
  * Support percentage calculation
* **Timeline**:
  * Majority date (if applicable)
  * Expected activation date (if applicable)
  * Complete visual timeline
  * Python/JavaScript code used for calculations
* **Protocol Impact**:
  * Transaction types added
  * Ledger entry types added
  * Rule modifications
  * Impact on applications
  * Risk assessment (1 page)
* **Pseudo-transaction** (optional):
  * Hash and ledger of `tfGotMajority` transaction
  * Link to explorer
* **Appendices**:
  * Complete source code used
  * Screenshots
  * References (XLS links, documentation)

***

### Tips

* **Public nodes**: `wss://xrplcluster.com/` or `wss://s1.ripple.com/`
* **Explorers**: <https://bithomp.com>, <https://xrpscan.com>
* **Documentation**: <https://xrpl.org/amendments.html>
* **XLS Standards**: <https://github.com/XRPLF/XRPL-Standards>

**Useful commands**:

```bash
# Via CLI
rippled feature
rippled feature <AMENDMENT_HASH>

# Via HTTP API
curl -X POST https://xrplcluster.com/ \
  -H "Content-Type: application/json" \
  -d '{"method": "feature", "params": [{}]}'
```

**Libraries**:

* JavaScript: `xrpl.js`
* Python: `xrpl-py`

### Additional Resources

* **XRPL Amendments**: <https://xrpl.org/docs/concepts/networks-and-servers/amendments>
* **Known Amendments**: <https://xrpl.org/resources/known-amendments>
* **EnableAmendment**: <https://xrpl.org/docs/references/protocol/transactions/pseudo-transaction-types/enableamendment>

***

Good luck! This exercise will give you a thorough practical understanding of the XRPL amendment system.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.xrpl-commons.org/core-dev-bootcamp/module10/homework1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
