Repository: Peersyst/xrpl-go
Pull request #125: [TA-4202] Add transaction result codes
Author: login: banasa44
Labels: name: feature
description: Feature
name: xrpl
description: xrpl package
Created: 2025-03-24T16:27:12Z | Merged: 2025-03-27T10:28:44Z

# [TA-4202] Add transaction result codes

## Description
This PR aims to add all the TxResult codes tec/tef/tel/tem/ter.

## Type of change
- [ ] Bug fix
- [x] New feature
- [ ] Breaking change
- [ ] Documentation update
- [ ] Refactoring

## Checklist:
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my own code
- [ ] I have commented my code where needed
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective
- [x] New and existing unit tests pass locally with my changes

## Changes

- Add tec/tef/tel/tem/ter TxResult codes 
- Add unit tests
- Replace all string declarations of the TxResult codes for transaction.TxResult.String()
- Disabled lint: `revive:disable:var-naming` & `#nosec G101` for false warnings.

## Notes 

Comparative with xrpl.js
https://github.com/XRPLF/xrpl.js/blob/7fe27f3d9c8cdb92a7f9ad97daa9cf7bb0344637/packages/ripple-binary-codec/src/enums/definitions.json#L2920

temBAD_AUTH_MASTER, temREDUNDANT_SEND_MAX & terSUBMITTED -> not in definitions.json nor in xrpl.js

There’s unconsistency xrpl.go vs xrlp.js

```js
// .go
    "temBAD_WEIGHT": -270,
    "temBAD_TICK_SIZE": -269,
    "temINVALID_ACCOUNT_ID": -268,
    
// .js    
temBAD_WEIGHT: -269,
temBAD_TICK_SIZE: -268,
temINVALID_ACCOUNT_ID: -267,
```


<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Expanded transaction outcome codes now provide more precise and informative error feedback during transaction processing.
- **Refactor**
  - Updated error value handling to use dynamic references, enhancing consistency and maintainability in transaction result reporting.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c05dbde2..0058af68 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,19 +5,16 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
-## [v0.1.8]
+## [Unreleased]
 
 ### Added
 
 #### xrpl
 
-- Added `BalanceChanges` to the `Transaction` type.
-
-### Changed
-
-#### xrpl
+- Added tec/tef/tel/tem/ter TxResult codes.
+- Replaced string declaration with constant/object references.
 
-- Updated `AffectedNode` type fields to be a pointer to allow nil values.
+## [v0.1.9]
 
 ### Added
 
@@ -30,8 +27,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Fixed
 
+#### big-decimal
+
+- Amounts transcoding fix for large values.
+
+## [v0.1.8]
+
+### Added
+
+#### xrpl
+
+- Added `BalanceChanges` to the `Transaction` type.
+
+### Changed
+
 #### xrpl
 
+- Updated `AffectedNode` type fields to be a pointer to allow nil values.
 - Fixed `BaseLedger` field in `ledger` response (v1 and v2). BaseLedger.Transactions is now an array of interfaces instead of a slice of `FlatTransaction` due to `Expand` field in the request.
 
 ## [v0.1.7]
diff --git a/Dockerfile b/Dockerfile
index dbd41750..da802385 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,7 +7,7 @@ RUN go mod download
 COPY . .
 
 FROM install AS lint
-RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
+RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.64.8
 RUN make lint
 
 FROM lint AS test
diff --git a/xrpl/testutil/integration/runner.go b/xrpl/testutil/integration/runner.go
index 61e710ec..a63409fa 100644
--- a/xrpl/testutil/integration/runner.go
+++ b/xrpl/testutil/integration/runner.go
@@ -131,7 +131,7 @@ func (r *Runner) processTransaction(flatTx *transaction.FlatTransaction, signer
 			return nil, hash, err
 		}
 
-		if tx.EngineResult != "tefPAST_SEQ" || attempts >= r.config.MaxRetries {
+		if tx.EngineResult != transaction.TefPAST_SEQ.String() || attempts >= r.config.MaxRetries {
 			return tx, hash, nil
 		}
 		attempts++
diff --git a/xrpl/transaction/results.go b/xrpl/transaction/results.go
index 03d9407a..40db5323 100644
--- a/xrpl/transaction/results.go
+++ b/xrpl/transaction/results.go
@@ -3,14 +3,10 @@ package transaction
 // TxResult represents the result code of a transaction
 type TxResult string
 
-const (
-	// Success results - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tes-success
-
-	// The transaction was applied and forwarded to other servers.
-	// If this appears in a validated ledger, then the transaction's success is final.
-	TesSUCCESS TxResult = "tesSUCCESS"
+//revive:disable:var-naming
+// #nosec G101
 
-	// ------------------------------------------------------------------------------------------------
+const (
 	// tec codes ⬇️ - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tec-codes
 
 	// These codes indicate that the transaction failed, but it was applied to a ledger to apply the transaction cost. They have numerical values in the range 100 to 199. It is recommended to use the text code, not the numeric value.
@@ -18,10 +14,294 @@ const (
 	// Transactions with tec codes destroy the XRP paid as a transaction cost, and consume a sequence number. For the most part, the transactions take no other action, but there are some exceptions. For example, a transaction that results in tecOVERSIZE still cleans up some unfunded offers. Always look at the transaction metadata to see precisely what a transaction did.
 	// ------------------------------------------------------------------------------------------------
 
-	// The transaction tried to create an object (such as an Offer or a Check) whose provided Expiration time has already passed.
-	TecEXPIRED   TxResult = "tecEXPIRED"
+	// The transaction failed because the operation is not allowed on Automated Market Maker (AMM) accounts. (Added by the AMM amendment)
+	TecAMM_ACCOUNT TxResult = "tecAMM_ACCOUNT"
+
+	// The AMMCreate transaction failed because the sender does not have enough of the specified assets to fund it. (Added by the AMM amendment)
+	TecAMM_UNFUNDED TxResult = "tecAMM_UNFUNDED"
+
+	// The AMMDeposit or AMMWithdraw transaction failed because either the AMM or the user does not hold enough of one of the specified assets. (Added by the AMM amendment)
+	TecAMM_BALANCE TxResult = "tecAMM_BALANCE"
+
+	// The AMM-related transaction failed because the AMM has no assets in its pool. In this state, you can only delete the AMM or fund it with a new deposit. (Added by the AMM amendment)
+	TecAMM_EMPTY TxResult = "tecAMM_EMPTY"
+
+	// The AMM-related transaction failed due to asset availability or pricing constraints. (Added by the AMM amendment)
+	TecAMM_FAILED TxResult = "tecAMM_FAILED"
+
+	// The AMM-related transaction failed due to insufficient LP Tokens or problems with rounding. (Added by the AMM amendment)
+	TecAMM_INVALID_TOKENS TxResult = "tecAMM_INVALID_TOKENS"
+
+	// The transaction was meant to operate on an AMM with empty asset pools, but the specified AMM currently holds assets. (Added by the AMM amendment)
+	TecAMM_NOT_EMPTY TxResult = "tecAMM_NOT_EMPTY"
+
+	// The transaction tried to accept an offer placed by the same account to buy or sell an NFToken. (Added by the NonFungibleTokensV1_1 amendment)
+	TecCANT_ACCEPT_OWN_NFTOKEN_OFFER TxResult = "tecCANT_ACCEPT_OWN_NFTOKEN_OFFER"
+
+	// Unspecified failure, with transaction cost destroyed.
+	TecCLAIM TxResult = "tecCLAIM"
+
+	// This EscrowCreate or EscrowFinish transaction contained a malformed or mismatched crypto-condition.
+	TecCRYPTOCONDITION_ERROR TxResult = "tecCRYPTOCONDITION_ERROR"
+
+	// The transaction tried to add an object to an account's owner directory, but the directory is full.
+	TecDIR_FULL TxResult = "tecDIR_FULL"
+
+	// The transaction tried to create an object that already exists.
 	TecDUPLICATE TxResult = "tecDUPLICATE"
 
+	// The Payment transaction omitted a destination tag, but the destination account requires one.
+	TecDST_TAG_NEEDED TxResult = "tecDST_TAG_NEEDED"
+
+	// The transaction tried to create a DID entry with no contents. (Added by the DID amendment)
+	TecEMPTY_DID TxResult = "tecEMPTY_DID"
+
+	// The transaction tried to create an object whose provided Expiration time has already passed.
+	TecEXPIRED TxResult = "tecEXPIRED"
+
+	// An unspecified error occurred when processing the transaction.
+	TecFAILED_PROCESSING TxResult = "tecFAILED_PROCESSING"
+
+	// The OfferCreate transaction failed because one or both of the assets involved are subject to a global freeze.
+	TecFROZEN TxResult = "tecFROZEN"
+
+	// The AccountDelete transaction failed because the account owns objects that cannot be deleted.
+	TecHAS_OBLIGATIONS TxResult = "tecHAS_OBLIGATIONS"
+
+	// The transaction failed due to insufficient XRP to create a new trust line.
+	TecINSUF_RESERVE_LINE TxResult = "tecINSUF_RESERVE_LINE"
+
+	// The transaction failed due to insufficient XRP to create a new Offer.
+	TecINSUF_RESERVE_OFFER TxResult = "tecINSUF_RESERVE_OFFER"
+
+	// The transaction failed because the sending account does not have enough XRP to pay the transaction cost specified.
+	TecINSUFF_FEE TxResult = "tecINSUFF_FEE"
+
+	// One of the accounts involved does not hold enough of a necessary asset. (Added by the NonFungibleTokensV1_1 amendment)
+	TecINSUFFICIENT_FUNDS TxResult = "tecINSUFFICIENT_FUNDS"
+
+	// The amount specified is not enough to pay all fees involved in the transaction. (Added by the NonFungibleTokensV1_1 amendment)
+	TecINSUFFICIENT_PAYMENT TxResult = "tecINSUFFICIENT_PAYMENT"
+
+	// The transaction would increase the reserve requirement higher than the sending account's balance.
+	TecINSUFFICIENT_RESERVE TxResult = "tecINSUFFICIENT_RESERVE"
+
+	// Unspecified internal error, with transaction cost applied. Should not normally be returned.
+	TecINTERNAL TxResult = "tecINTERNAL"
+
+	// An invariant check failed when executing this transaction. (EnforceInvariants amendment)
+	TecINVARIANT_FAILED TxResult = "tecINVARIANT_FAILED"
+
+	// The OfferCreate transaction specified tfFillOrKill and could not be filled.
+	TecKILLED TxResult = "tecKILLED"
+
+	// A sequence number field is already at its maximum. (Added by NonFungibleTokensV1_1 amendment)
+	TecMAX_SEQUENCE_REACHED TxResult = "tecMAX_SEQUENCE_REACHED"
+
+	// Transaction tried to cause changes requiring the master key.
+	TecNEED_MASTER_KEY TxResult = "tecNEED_MASTER_KEY"
+
+	// NFTokenAcceptOffer attempted to match incompatible buy/sell offers.
+	TecNFTOKEN_BUY_SELL_MISMATCH TxResult = "tecNFTOKEN_BUY_SELL_MISMATCH"
+
+	// Offer type mismatch in NFTokenAcceptOffer transaction.
+	TecNFTOKEN_OFFER_TYPE_MISMATCH TxResult = "tecNFTOKEN_OFFER_TYPE_MISMATCH"
+
+	// The transaction tried to remove the only available method of authorizing transactions. (Prior to rippled 0.30.0, this was called tecMASTER_DISABLED.)
+	TecNO_ALTERNATIVE_KEY TxResult = "tecNO_ALTERNATIVE_KEY"
+
+	// The transaction failed because it needs to add a balance on a trust line to an account with the lsfRequireAuth flag enabled, and that trust line has not been authorized.
+	TecNO_AUTH TxResult = "tecNO_AUTH"
+
+	// The account on the receiving end of the transaction does not exist.
+	TecNO_DST TxResult = "tecNO_DST"
+
+	// The account on the receiving end does not exist, and the transaction does not send enough XRP to create it.
+	TecNO_DST_INSUF_XRP TxResult = "tecNO_DST_INSUF_XRP"
+
+	// The transaction tried to modify a ledger object, but the specified object does not exist.
+	TecNO_ENTRY TxResult = "tecNO_ENTRY"
+
+	// The account specified as issuer of a currency does not exist.
+	TecNO_ISSUER TxResult = "tecNO_ISSUER"
+
+	// The TakerPays field specifies an asset requiring authorization, but the account lacks a trust line.
+	TecNO_LINE TxResult = "tecNO_LINE"
+
+	// Insufficient XRP reserve to create a new trust line; the counterparty has no trust line.
+	TecNO_LINE_INSUF_RESERVE TxResult = "tecNO_LINE_INSUF_RESERVE"
+
+	// The transaction attempted to set a trust line to its default state, but it didn't exist.
+	TecNO_LINE_REDUNDANT TxResult = "tecNO_LINE_REDUNDANT"
+
+	// The sender lacks permission to execute the requested operation.
+	TecNO_PERMISSION TxResult = "tecNO_PERMISSION"
+
+	// Attempted to disable the master key, but no alternative method exists.
+	TecNO_REGULAR_KEY TxResult = "tecNO_REGULAR_KEY"
+
+	// No available directory page to hold the minted/acquired NFToken. (Added by the NonFungibleTokensV1_1 amendment)
+	TecNO_SUITABLE_NFTOKEN_PAGE TxResult = "tecNO_SUITABLE_NFTOKEN_PAGE"
+
+	// The referenced Escrow or PayChannel ledger object doesn't exist or has already been deleted.
+	TecNO_TARGET TxResult = "tecNO_TARGET"
+
+	// An object specified in this transaction did not exist in the ledger. (Added by NonFungibleTokensV1_1 amendment)
+	TecOBJECT_NOT_FOUND TxResult = "tecOBJECT_NOT_FOUND"
+
+	// The transaction created excessively large metadata.
+	TecOVERSIZE TxResult = "tecOVERSIZE"
+
+	// The transaction cannot succeed because the sender already owns ledger objects.
+	TecOWNERS TxResult = "tecOWNERS"
+
+	// Provided paths lack enough liquidity to send any amount at all.
+	TecPATH_DRY TxResult = "tecPATH_DRY"
+
+	// Provided paths lack enough liquidity to send the full requested amount.
+	TecPATH_PARTIAL TxResult = "tecPATH_PARTIAL"
+
+	// Account deletion failed due to a sequence number being too recent.
+	TecTOO_SOON TxResult = "tecTOO_SOON"
+
+	// Insufficient XRP to cover the transaction amount plus reserve requirements.
+	TecUNFUNDED TxResult = "tecUNFUNDED"
+
+	// DEPRECATED.
+	TecUNFUNDED_ADD TxResult = "tecUNFUNDED_ADD"
+
+	// Attempted payment exceeds the sender’s XRP holdings.
+	TecUNFUNDED_PAYMENT TxResult = "tecUNFUNDED_PAYMENT"
+
+	// Offer creation failed due to lack of the TakerGets currency.
+	TecUNFUNDED_OFFER TxResult = "tecUNFUNDED_OFFER"
+
+	// ------------------------------------------------------------------------------------------------
+	// tef codes ⬇️ - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tef-codes
+	//
+	// These codes indicate that the transaction failed and was not included in a ledger, but the transaction could have succeeded in some theoretical ledger.
+	// Typically this means that the transaction can no longer succeed in any future ledger. They have numerical values in the range -199 to -100. The exact code for any given error is subject to change, so don't rely on it.
+	// ------------------------------------------------------------------------------------------------
+
+	// The sequence number of the transaction is lower than the current sequence number of the account sending the transaction.
+	//revive:disable-next-line:var-naming
+	// The same exact transaction has already been applied.
+	TefALREADY TxResult = "tefALREADY"
+
+	// DEPRECATED.
+	TefBAD_ADD_AUTH TxResult = "tefBAD_ADD_AUTH"
+
+	// The key used to sign this account is not authorized to modify this account.
+	TefBAD_AUTH TxResult = "tefBAD_AUTH"
+
+	// The single signature provided to authorize this transaction does not match the master key, but no regular key is associated with this address.
+	TefBAD_AUTH_MASTER TxResult = "tefBAD_AUTH_MASTER"
+
+	// The ledger was discovered in an unexpected state while processing the transaction.
+	TefBAD_LEDGER TxResult = "tefBAD_LEDGER"
+
+	// The transaction was multi-signed, but signatures did not meet quorum.
+	TefBAD_QUORUM TxResult = "tefBAD_QUORUM"
+
+	// The transaction was multi-signed but included a signature not part of the SignerList.
+	TefBAD_SIGNATURE TxResult = "tefBAD_SIGNATURE"
+
+	// DEPRECATED.
+	TefCREATED TxResult = "tefCREATED"
+
+	// The server entered an unexpected state processing the transaction.
+	TefEXCEPTION TxResult = "tefEXCEPTION"
+
+	// Unspecified failure in applying the transaction.
+	TefFAILURE TxResult = "tefFAILURE"
+
+	// The server entered an unexpected internal state when applying the transaction.
+	TefINTERNAL TxResult = "tefINTERNAL"
+
+	// An invariant check failed when claiming the transaction cost.
+	TefINVARIANT_FAILED TxResult = "tefINVARIANT_FAILED"
+
+	// The transaction was signed with the master key, but the account has master key disabled.
+	TefMASTER_DISABLED TxResult = "tefMASTER_DISABLED"
+
+	// Transaction included LastLedgerSequence, but the current ledger sequence number exceeds it.
+	TefMAX_LEDGER TxResult = "tefMAX_LEDGER"
+
+	// Attempted transfer of non-transferable NFToken.
+	TefNFTOKEN_IS_NOT_TRANSFERABLE TxResult = "tefNFTOKEN_IS_NOT_TRANSFERABLE"
+
+	// TrustSet transaction tried to authorize a trust line unnecessarily.
+	TefNO_AUTH_REQUIRED TxResult = "tefNO_AUTH_REQUIRED"
+
+	// The transaction attempted to use a Ticket that cannot exist.
+	TefNO_TICKET TxResult = "tefNO_TICKET"
+
+	// The transaction was multi-signed, but the sending account has no SignerList.
+	TefNOT_MULTI_SIGNING TxResult = "tefNOT_MULTI_SIGNING"
+
+	// The transaction's sequence number is lower than the account's current sequence number.
+	TefPAST_SEQ TxResult = "tefPAST_SEQ"
+
+	// The transaction would affect too many objects in the ledger.
+	TefTOO_BIG TxResult = "tefTOO_BIG"
+
+	// AccountTxnID does not match the account's previous transaction.
+	TefWRONG_PRIOR TxResult = "tefWRONG_PRIOR"
+
+	// ------------------------------------------------------------------------------------------------
+	// tel codes ⬇️ - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tel-codes
+	// These codes indicate an error in the local server processing the transaction; it is possible that another server with a different configuration or load level could process the transaction successfully.
+	// They have numerical values in the range -399 to -300. The exact code for any given error is subject to change, so don't rely on it.
+	// ------------------------------------------------------------------------------------------------
+
+	// The domain value specified by the transaction is invalid or too long.
+	TelBAD_DOMAIN TxResult = "telBAD_DOMAIN"
+
+	// Transaction contains too many paths to process.
+	TelBAD_PATH_COUNT TxResult = "telBAD_PATH_COUNT"
+
+	// The public key value specified by the transaction is invalid or incorrect in length.
+	TelBAD_PUBLIC_KEY TxResult = "telBAD_PUBLIC_KEY"
+
+	// Transaction not queued due to queuing restrictions.
+	TelCAN_NOT_QUEUE TxResult = "telCAN_NOT_QUEUE"
+
+	// Transaction not queued because potential costs exceed account balance.
+	TelCAN_NOT_QUEUE_BALANCE TxResult = "telCAN_NOT_QUEUE_BALANCE"
+
+	// Transaction not queued because it would block existing queued transactions.
+	TelCAN_NOT_QUEUE_BLOCKS TxResult = "telCAN_NOT_QUEUE_BLOCKS"
+
+	// Transaction not queued because it is blocked by transactions ahead of it.
+	TelCAN_NOT_QUEUE_BLOCKED TxResult = "telCAN_NOT_QUEUE_BLOCKED"
+
+	// Transaction not queued due to insufficient fee increase.
+	TelCAN_NOT_QUEUE_FEE TxResult = "telCAN_NOT_QUEUE_FEE"
+
+	// Transaction not queued because the transaction queue is full.
+	TelCAN_NOT_QUEUE_FULL TxResult = "telCAN_NOT_QUEUE_FULL"
+
+	// An unspecified error occurred processing the transaction.
+	TelFAILED_PROCESSING TxResult = "telFAILED_PROCESSING"
+
+	// Fee insufficient based on current server load.
+	TelINSUF_FEE_P TxResult = "telINSUF_FEE_P"
+
+	// Unspecified local error occurred.
+	TelLOCAL_ERROR TxResult = "telLOCAL_ERROR"
+
+	// NetworkID field specified incorrectly based on current network rules.
+	TelNETWORK_ID_MAKES_TX_NON_CANONICAL TxResult = "telNETWORK_ID_MAKES_TX_NON_CANONICAL"
+
+	// tfPartialPayment improperly used in an XRP payment funding a new account.
+	TelNO_DST_PARTIAL TxResult = "telNO_DST_PARTIAL"
+
+	// Transaction missing required NetworkID field.
+	TelREQUIRES_NETWORK_ID TxResult = "telREQUIRES_NETWORK_ID"
+
+	// Transaction specifies incorrect NetworkID value for the current network.
+	TelWRONG_NETWORK TxResult = "telWRONG_NETWORK"
+
 	// ------------------------------------------------------------------------------------------------
 	// tem codes ⬇️ - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tem-codes
 	//
@@ -29,19 +309,173 @@ const (
 	// They have numerical values in the range -299 to -200. The exact code for any given error is subject to change, so don't rely on it.
 	// ------------------------------------------------------------------------------------------------
 
-	// The transaction is otherwise invalid. For example, the transaction ID may not be the right format, the signature may not be formed properly, or something else went wrong in understanding the transaction.
+	// The transaction incorrectly specified one or more assets. (Added by the AMM amendment)
+	TemBAD_AMM_TOKENS TxResult = "temBAD_AMM_TOKENS"
+
+	// An amount specified by the transaction was invalid, possibly negative.
+	TemBAD_AMOUNT TxResult = "temBAD_AMOUNT"
+
+	// Key used for signing doesn't match master key, and no Regular Key is set.
+	TemBAD_AUTH_MASTER TxResult = "temBAD_AUTH_MASTER"
+
+	// Currency field improperly specified.
+	TemBAD_CURRENCY TxResult = "temBAD_CURRENCY"
+
+	// Expiration value improperly specified or missing.
+	TemBAD_EXPIRATION TxResult = "temBAD_EXPIRATION"
+
+	// Fee value improperly specified.
+	TemBAD_FEE TxResult = "temBAD_FEE"
+
+	// Issuer field improperly specified.
+	TemBAD_ISSUER TxResult = "temBAD_ISSUER"
+
+	// LimitAmount value improperly specified.
+	TemBAD_LIMIT TxResult = "temBAD_LIMIT"
+
+	// NFTokenMint TransferFee improperly specified. (Added by NonFungibleTokensV1_1 amendment)
+	TemBAD_NFTOKEN_TRANSFER_FEE TxResult = "temBAD_NFTOKEN_TRANSFER_FEE"
+
+	// Invalid offer specified in OfferCreate.
+	TemBAD_OFFER TxResult = "temBAD_OFFER"
+
+	// Payment Paths improperly specified.
+	TemBAD_PATH TxResult = "temBAD_PATH"
+
+	// Payment Paths flagged as a loop.
+	TemBAD_PATH_LOOP TxResult = "temBAD_PATH_LOOP"
+
+	// tfLimitQuality improperly used in direct XRP-to-XRP payment.
+	TemBAD_SEND_XRP_LIMIT TxResult = "temBAD_SEND_XRP_LIMIT"
+
+	// SendMax improperly included in direct XRP-to-XRP payment.
+	TemBAD_SEND_XRP_MAX TxResult = "temBAD_SEND_XRP_MAX"
+
+	// tfNoDirectRipple improperly used in direct XRP-to-XRP payment.
+	TemBAD_SEND_XRP_NO_DIRECT TxResult = "temBAD_SEND_XRP_NO_DIRECT"
+
+	// tfPartialPayment improperly used in direct XRP-to-XRP payment.
+	TemBAD_SEND_XRP_PARTIAL TxResult = "temBAD_SEND_XRP_PARTIAL"
+
+	// Paths improperly included in direct XRP-to-XRP payment.
+	TemBAD_SEND_XRP_PATHS TxResult = "temBAD_SEND_XRP_PATHS"
+
+	// Sequence number references a future transaction.
+	TemBAD_SEQUENCE TxResult = "temBAD_SEQUENCE"
+
+	// Signature missing or improperly formed.
+	TemBAD_SIGNATURE TxResult = "temBAD_SIGNATURE"
+
+	// Source account address improperly formed.
+	TemBAD_SRC_ACCOUNT TxResult = "temBAD_SRC_ACCOUNT"
+
+	// TransferRate field improperly formatted.
+	TemBAD_TRANSFER_RATE TxResult = "temBAD_TRANSFER_RATE"
+
+	// DepositPreauth transaction attempted to preauthorize self.
+	TemCANNOT_PREAUTH_SELF TxResult = "temCANNOT_PREAUTH_SELF"
+
+	// Destination address matches sending account.
+	TemDST_IS_SRC TxResult = "temDST_IS_SRC"
+
+	// Transaction improperly omitted destination.
+	TemDST_NEEDED TxResult = "temDST_NEEDED"
+
+	// Transaction is otherwise invalid.
 	TemINVALID TxResult = "temINVALID"
 
+	// TicketCount field specifies invalid number of tickets.
+	TemINVALID_COUNT TxResult = "temINVALID_COUNT"
+
+	// Transaction includes invalid or contradictory Flag.
+	TemINVALID_FLAG TxResult = "temINVALID_FLAG"
+
+	// Unspecified problem with transaction format.
+	TemMALFORMED TxResult = "temMALFORMED"
+
+	// Transaction would accomplish nothing.
+	TemREDUNDANT TxResult = "temREDUNDANT"
+
+	// Removed in: rippled 0.28.0.
+	TemREDUNDANT_SEND_MAX TxResult = "temREDUNDANT_SEND_MAX"
+
+	// Payment transaction includes empty Paths.
+	TemRIPPLE_EMPTY TxResult = "temRIPPLE_EMPTY"
+
+	// Invalid SignerWeight in SignerListSet.
+	TemBAD_WEIGHT TxResult = "temBAD_WEIGHT"
+
+	// Invalid signer in SignerListSet.
+	TemBAD_SIGNER TxResult = "temBAD_SIGNER"
+
+	// Invalid SignerQuorum value in SignerListSet.
+	TemBAD_QUORUM TxResult = "temBAD_QUORUM"
+
+	// Used internally only, never returned.
+	TemUNCERTAIN TxResult = "temUNCERTAIN"
+
+	// Used internally only, never returned.
+	TemUNKNOWN TxResult = "temUNKNOWN"
+
+	// Transaction requires disabled logic or amendment.
+	TemDISABLED TxResult = "temDISABLED"
+
 	// ------------------------------------------------------------------------------------------------
-	// tef codes ⬇️ - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tef-codes
+	// ter codes ⬇️ - https://xrpl.org/docs/references/protocol/transactions/transaction-results/ter-codes
 	//
-	// These codes indicate that the transaction failed and was not included in a ledger, but the transaction could have succeeded in some theoretical ledger.
-	// Typically this means that the transaction can no longer succeed in any future ledger. They have numerical values in the range -199 to -100. The exact code for any given error is subject to change, so don't rely on it.
+	// These codes indicate that the transaction has not been applied yet, and generally will be automatically retried by the server that returned the result code. The transaction could apply successfully in the future; for example, if a certain other transaction applies first.
+	// These codes have numerical values in the range -99 to -1, but the exact code for any given error is subject to change, so don't rely on it.
 	// ------------------------------------------------------------------------------------------------
 
-	// The sequence number of the transaction is lower than the current sequence number of the account sending the transaction.
-	//revive:disable-next-line:var-naming
-	TefPAST_SEQ TxResult = "tefPAST_SEQ"
+	// DEPRECATED.
+	TerFUNDS_SPENT TxResult = "terFUNDS_SPENT"
+
+	// Sending account has insufficient XRP to pay the specified fee.
+	TerINSUF_FEE_B TxResult = "terINSUF_FEE_B"
+
+	// Used internally only, never returned.
+	TerLAST TxResult = "terLAST"
+
+	// Sending address is not yet funded in the ledger.
+	TerNO_ACCOUNT TxResult = "terNO_ACCOUNT"
+
+	// Asset pair specified does not have an existing AMM instance. (Added by AMM amendment)
+	TerNO_AMM TxResult = "terNO_AMM"
+
+	// Attempted to add unauthorized currency to trust line.
+	TerNO_AUTH TxResult = "terNO_AUTH"
+
+	// Used internally only, never returned.
+	TerNO_LINE TxResult = "terNO_LINE"
+
+	// Transaction cannot succeed due to rippling settings.
+	TerNO_RIPPLE TxResult = "terNO_RIPPLE"
+
+	// Transaction requires sender to have nonzero owners count.
+	TerOWNERS TxResult = "terOWNERS"
+
+	// Sequence number is higher than the sender's current sequence number.
+	TerPRE_SEQ TxResult = "terPRE_SEQ"
+
+	// Attempted to use Ticket not yet existing in the ledger, though it could still be created.
+	TerPRE_TICKET TxResult = "terPRE_TICKET"
+
+	// Transaction met load-scaled cost but queued for future ledger due to open ledger cost.
+	TerQUEUED TxResult = "terQUEUED"
+
+	// Unspecified retriable error.
+	TerRETRY TxResult = "terRETRY"
+
+	// Transaction submitted but not yet applied.
+	TerSUBMITTED TxResult = "terSUBMITTED"
+
+	// ------------------------------------------------------------------------------------------------
+	// Success results - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tes-success
+	// ------------------------------------------------------------------------------------------------
+
+	// The transaction was applied and forwarded to other servers.
+	// If this appears in a validated ledger, then the transaction's success is final.
+	TesSUCCESS TxResult = "tesSUCCESS"
 )
 
 // String returns the string representation of the result
diff --git a/xrpl/transaction/results_test.go b/xrpl/transaction/results_test.go
index d9f173d4..5819556f 100644
--- a/xrpl/transaction/results_test.go
+++ b/xrpl/transaction/results_test.go
@@ -12,15 +12,61 @@ func TestTxResult_String(t *testing.T) {
 		txResult TxResult
 		expected string
 	}{
+		// Tec Codes
 		{
-			name:     "TesSUCCESS",
-			txResult: TesSUCCESS,
-			expected: "tesSUCCESS",
+			name:     "TecAMM_ACCOUNT",
+			txResult: TecAMM_ACCOUNT,
+			expected: "tecAMM_ACCOUNT",
 		},
 		{
-			name:     "TecEXPIRED",
-			txResult: TecEXPIRED,
-			expected: "tecEXPIRED",
+			name:     "TecAMM_UNFUNDED",
+			txResult: TecAMM_UNFUNDED,
+			expected: "tecAMM_UNFUNDED",
+		},
+		{
+			name:     "TecAMM_BALANCE",
+			txResult: TecAMM_BALANCE,
+			expected: "tecAMM_BALANCE",
+		},
+		{
+			name:     "TecAMM_EMPTY",
+			txResult: TecAMM_EMPTY,
+			expected: "tecAMM_EMPTY",
+		},
+		{
+			name:     "TecAMM_FAILED",
+			txResult: TecAMM_FAILED,
+			expected: "tecAMM_FAILED",
+		},
+		{
+			name:     "TecAMM_INVALID_TOKENS",
+			txResult: TecAMM_INVALID_TOKENS,
+			expected: "tecAMM_INVALID_TOKENS",
+		},
+		{
+			name:     "TecAMM_NOT_EMPTY",
+			txResult: TecAMM_NOT_EMPTY,
+			expected: "tecAMM_NOT_EMPTY",
+		},
+		{
+			name:     "TecCANT_ACCEPT_OWN_NFTOKEN_OFFER",
+			txResult: TecCANT_ACCEPT_OWN_NFTOKEN_OFFER,
+			expected: "tecCANT_ACCEPT_OWN_NFTOKEN_OFFER",
+		},
+		{
+			name:     "TecCLAIM",
+			txResult: TecCLAIM,
+			expected: "tecCLAIM",
+		},
+		{
+			name:     "TecCRYPTOCONDITION_ERROR",
+			txResult: TecCRYPTOCONDITION_ERROR,
+			expected: "tecCRYPTOCONDITION_ERROR",
+		},
+		{
+			name:     "TecDIR_FULL",
+			txResult: TecDIR_FULL,
+			expected: "tecDIR_FULL",
 		},
 		{
 			name:     "TecDUPLICATE",
@@ -28,15 +74,668 @@ func TestTxResult_String(t *testing.T) {
 			expected: "tecDUPLICATE",
 		},
 		{
-			name:     "TemINVALID",
-			txResult: TemINVALID,
-			expected: "temINVALID",
+			name:     "TecDST_TAG_NEEDED",
+			txResult: TecDST_TAG_NEEDED,
+			expected: "tecDST_TAG_NEEDED",
+		},
+		{
+			name:     "TecEMPTY_DID",
+			txResult: TecEMPTY_DID,
+			expected: "tecEMPTY_DID",
+		},
+		{
+			name:     "TecEXPIRED",
+			txResult: TecEXPIRED,
+			expected: "tecEXPIRED",
+		},
+		{
+			name:     "TecFAILED_PROCESSING",
+			txResult: TecFAILED_PROCESSING,
+			expected: "tecFAILED_PROCESSING",
+		},
+		{
+			name:     "TecFROZEN",
+			txResult: TecFROZEN,
+			expected: "tecFROZEN",
+		},
+		{
+			name:     "TecHAS_OBLIGATIONS",
+			txResult: TecHAS_OBLIGATIONS,
+			expected: "tecHAS_OBLIGATIONS",
+		},
+		{
+			name:     "TecINSUF_RESERVE_LINE",
+			txResult: TecINSUF_RESERVE_LINE,
+			expected: "tecINSUF_RESERVE_LINE",
+		},
+		{
+			name:     "TecINSUF_RESERVE_OFFER",
+			txResult: TecINSUF_RESERVE_OFFER,
+			expected: "tecINSUF_RESERVE_OFFER",
+		},
+		{
+			name:     "TecINSUFF_FEE",
+			txResult: TecINSUFF_FEE,
+			expected: "tecINSUFF_FEE",
+		},
+		{
+			name:     "TecINSUFFICIENT_FUNDS",
+			txResult: TecINSUFFICIENT_FUNDS,
+			expected: "tecINSUFFICIENT_FUNDS",
+		},
+		{
+			name:     "TecINSUFFICIENT_PAYMENT",
+			txResult: TecINSUFFICIENT_PAYMENT,
+			expected: "tecINSUFFICIENT_PAYMENT",
+		},
+		{
+			name:     "TecINSUFFICIENT_RESERVE",
+			txResult: TecINSUFFICIENT_RESERVE,
+			expected: "tecINSUFFICIENT_RESERVE",
+		},
+		{
+			name:     "TecINTERNAL",
+			txResult: TecINTERNAL,
+			expected: "tecINTERNAL",
+		},
+		{
+			name:     "TecINVARIANT_FAILED",
+			txResult: TecINVARIANT_FAILED,
+			expected: "tecINVARIANT_FAILED",
+		},
+		{
+			name:     "TecKILLED",
+			txResult: TecKILLED,
+			expected: "tecKILLED",
+		},
+		{
+			name:     "TecMAX_SEQUENCE_REACHED",
+			txResult: TecMAX_SEQUENCE_REACHED,
+			expected: "tecMAX_SEQUENCE_REACHED",
+		},
+		{
+			name:     "TecNEED_MASTER_KEY",
+			txResult: TecNEED_MASTER_KEY,
+			expected: "tecNEED_MASTER_KEY",
+		},
+		{
+			name:     "TecNFTOKEN_BUY_SELL_MISMATCH",
+			txResult: TecNFTOKEN_BUY_SELL_MISMATCH,
+			expected: "tecNFTOKEN_BUY_SELL_MISMATCH",
+		},
+		{
+			name:     "TecNFTOKEN_OFFER_TYPE_MISMATCH",
+			txResult: TecNFTOKEN_OFFER_TYPE_MISMATCH,
+			expected: "tecNFTOKEN_OFFER_TYPE_MISMATCH",
+		},
+		{
+			name:     "TecNO_ALTERNATIVE_KEY",
+			txResult: TecNO_ALTERNATIVE_KEY,
+			expected: "tecNO_ALTERNATIVE_KEY",
+		},
+		{
+			name:     "TecNO_AUTH",
+			txResult: TecNO_AUTH,
+			expected: "tecNO_AUTH",
+		},
+		{
+			name:     "TecNO_DST",
+			txResult: TecNO_DST,
+			expected: "tecNO_DST",
+		},
+		{
+			name:     "TecNO_DST_INSUF_XRP",
+			txResult: TecNO_DST_INSUF_XRP,
+			expected: "tecNO_DST_INSUF_XRP",
+		},
+		{
+			name:     "TecNO_ENTRY",
+			txResult: TecNO_ENTRY,
+			expected: "tecNO_ENTRY",
+		},
+		{
+			name:     "TecNO_ISSUER",
+			txResult: TecNO_ISSUER,
+			expected: "tecNO_ISSUER",
+		},
+		{
+			name:     "TecNO_LINE",
+			txResult: TecNO_LINE,
+			expected: "tecNO_LINE",
+		},
+		{
+			name:     "TecNO_LINE_INSUF_RESERVE",
+			txResult: TecNO_LINE_INSUF_RESERVE,
+			expected: "tecNO_LINE_INSUF_RESERVE",
+		},
+		{
+			name:     "TecNO_LINE_REDUNDANT",
+			txResult: TecNO_LINE_REDUNDANT,
+			expected: "tecNO_LINE_REDUNDANT",
+		},
+		{
+			name:     "TecNO_PERMISSION",
+			txResult: TecNO_PERMISSION,
+			expected: "tecNO_PERMISSION",
+		},
+		{
+			name:     "TecNO_REGULAR_KEY",
+			txResult: TecNO_REGULAR_KEY,
+			expected: "tecNO_REGULAR_KEY",
+		},
+		{
+			name:     "TecNO_SUITABLE_NFTOKEN_PAGE",
+			txResult: TecNO_SUITABLE_NFTOKEN_PAGE,
+			expected: "tecNO_SUITABLE_NFTOKEN_PAGE",
+		},
+		{
+			name:     "TecNO_TARGET",
+			txResult: TecNO_TARGET,
+			expected: "tecNO_TARGET",
+		},
+		{
+			name:     "TecOBJECT_NOT_FOUND",
+			txResult: TecOBJECT_NOT_FOUND,
+			expected: "tecOBJECT_NOT_FOUND",
+		},
+		{
+			name:     "TecOVERSIZE",
+			txResult: TecOVERSIZE,
+			expected: "tecOVERSIZE",
+		},
+		{
+			name:     "TecOWNERS",
+			txResult: TecOWNERS,
+			expected: "tecOWNERS",
+		},
+		{
+			name:     "TecPATH_DRY",
+			txResult: TecPATH_DRY,
+			expected: "tecPATH_DRY",
+		},
+		{
+			name:     "TecPATH_PARTIAL",
+			txResult: TecPATH_PARTIAL,
+			expected: "tecPATH_PARTIAL",
+		},
+		{
+			name:     "TecTOO_SOON",
+			txResult: TecTOO_SOON,
+			expected: "tecTOO_SOON",
+		},
+		{
+			name:     "TecUNFUNDED",
+			txResult: TecUNFUNDED,
+			expected: "tecUNFUNDED",
+		},
+		{
+			name:     "TecUNFUNDED_ADD",
+			txResult: TecUNFUNDED_ADD,
+			expected: "tecUNFUNDED_ADD",
+		},
+		{
+			name:     "TecUNFUNDED_PAYMENT",
+			txResult: TecUNFUNDED_PAYMENT,
+			expected: "tecUNFUNDED_PAYMENT",
+		},
+		{
+			name:     "TecUNFUNDED_OFFER",
+			txResult: TecUNFUNDED_OFFER,
+			expected: "tecUNFUNDED_OFFER",
+		},
+
+		// Tef Codes
+		{
+			name:     "TefALREADY",
+			txResult: TefALREADY,
+			expected: "tefALREADY",
+		},
+		{
+			name:     "TefBAD_ADD_AUTH",
+			txResult: TefBAD_ADD_AUTH,
+			expected: "tefBAD_ADD_AUTH",
+		},
+		{
+			name:     "TefBAD_AUTH",
+			txResult: TefBAD_AUTH,
+			expected: "tefBAD_AUTH",
+		},
+		{
+			name:     "TefBAD_AUTH_MASTER",
+			txResult: TefBAD_AUTH_MASTER,
+			expected: "tefBAD_AUTH_MASTER",
+		},
+		{
+			name:     "TefBAD_LEDGER",
+			txResult: TefBAD_LEDGER,
+			expected: "tefBAD_LEDGER",
+		},
+		{
+			name:     "TefBAD_QUORUM",
+			txResult: TefBAD_QUORUM,
+			expected: "tefBAD_QUORUM",
+		},
+		{
+			name:     "TefBAD_SIGNATURE",
+			txResult: TefBAD_SIGNATURE,
+			expected: "tefBAD_SIGNATURE",
+		},
+		{
+			name:     "TefCREATED",
+			txResult: TefCREATED,
+			expected: "tefCREATED",
+		},
+		{
+			name:     "TefEXCEPTION",
+			txResult: TefEXCEPTION,
+			expected: "tefEXCEPTION",
+		},
+		{
+			name:     "TefFAILURE",
+			txResult: TefFAILURE,
+			expected: "tefFAILURE",
+		},
+		{
+			name:     "TefINTERNAL",
+			txResult: TefINTERNAL,
+			expected: "tefINTERNAL",
+		},
+		{
+			name:     "TefINVARIANT_FAILED",
+			txResult: TefINVARIANT_FAILED,
+			expected: "tefINVARIANT_FAILED",
+		},
+		{
+			name:     "TefMASTER_DISABLED",
+			txResult: TefMASTER_DISABLED,
+			expected: "tefMASTER_DISABLED",
+		},
+		{
+			name:     "TefMAX_LEDGER",
+			txResult: TefMAX_LEDGER,
+			expected: "tefMAX_LEDGER",
+		},
+		{
+			name:     "TefNFTOKEN_IS_NOT_TRANSFERABLE",
+			txResult: TefNFTOKEN_IS_NOT_TRANSFERABLE,
+			expected: "tefNFTOKEN_IS_NOT_TRANSFERABLE",
+		},
+		{
+			name:     "TefNO_AUTH_REQUIRED",
+			txResult: TefNO_AUTH_REQUIRED,
+			expected: "tefNO_AUTH_REQUIRED",
+		},
+		{
+			name:     "TefNO_TICKET",
+			txResult: TefNO_TICKET,
+			expected: "tefNO_TICKET",
+		},
+		{
+			name:     "TefNOT_MULTI_SIGNING",
+			txResult: TefNOT_MULTI_SIGNING,
+			expected: "tefNOT_MULTI_SIGNING",
 		},
 		{
 			name:     "TefPAST_SEQ",
 			txResult: TefPAST_SEQ,
 			expected: "tefPAST_SEQ",
 		},
+		{
+			name:     "TefTOO_BIG",
+			txResult: TefTOO_BIG,
+			expected: "tefTOO_BIG",
+		},
+		{
+			name:     "TefWRONG_PRIOR",
+			txResult: TefWRONG_PRIOR,
+			expected: "tefWRONG_PRIOR",
+		},
+		// Tel Codes
+		{
+			name:     "TelBAD_DOMAIN",
+			txResult: TelBAD_DOMAIN,
+			expected: "telBAD_DOMAIN",
+		},
+		{
+			name:     "TelBAD_PATH_COUNT",
+			txResult: TelBAD_PATH_COUNT,
+			expected: "telBAD_PATH_COUNT",
+		},
+		{
+			name:     "TelBAD_PUBLIC_KEY",
+			txResult: TelBAD_PUBLIC_KEY,
+			expected: "telBAD_PUBLIC_KEY",
+		},
+		{
+			name:     "TelCAN_NOT_QUEUE",
+			txResult: TelCAN_NOT_QUEUE,
+			expected: "telCAN_NOT_QUEUE",
+		},
+		{
+			name:     "TelCAN_NOT_QUEUE_BALANCE",
+			txResult: TelCAN_NOT_QUEUE_BALANCE,
+			expected: "telCAN_NOT_QUEUE_BALANCE",
+		},
+		{
+			name:     "TelCAN_NOT_QUEUE_BLOCKS",
+			txResult: TelCAN_NOT_QUEUE_BLOCKS,
+			expected: "telCAN_NOT_QUEUE_BLOCKS",
+		},
+		{
+			name:     "TelCAN_NOT_QUEUE_BLOCKED",
+			txResult: TelCAN_NOT_QUEUE_BLOCKED,
+			expected: "telCAN_NOT_QUEUE_BLOCKED",
+		},
+		{
+			name:     "TelCAN_NOT_QUEUE_FEE",
+			txResult: TelCAN_NOT_QUEUE_FEE,
+			expected: "telCAN_NOT_QUEUE_FEE",
+		},
+		{
+			name:     "TelCAN_NOT_QUEUE_FULL",
+			txResult: TelCAN_NOT_QUEUE_FULL,
+			expected: "telCAN_NOT_QUEUE_FULL",
+		},
+		{
+			name:     "TelFAILED_PROCESSING",
+			txResult: TelFAILED_PROCESSING,
+			expected: "telFAILED_PROCESSING",
+		},
+		{
+			name:     "TelINSUF_FEE_P",
+			txResult: TelINSUF_FEE_P,
+			expected: "telINSUF_FEE_P",
+		},
+		{
+			name:     "TelLOCAL_ERROR",
+			txResult: TelLOCAL_ERROR,
+			expected: "telLOCAL_ERROR",
+		},
+		{
+			name:     "TelNETWORK_ID_MAKES_TX_NON_CANONICAL",
+			txResult: TelNETWORK_ID_MAKES_TX_NON_CANONICAL,
+			expected: "telNETWORK_ID_MAKES_TX_NON_CANONICAL",
+		},
+		{
+			name:     "TelNO_DST_PARTIAL",
+			txResult: TelNO_DST_PARTIAL,
+			expected: "telNO_DST_PARTIAL",
+		},
+		{
+			name:     "TelREQUIRES_NETWORK_ID",
+			txResult: TelREQUIRES_NETWORK_ID,
+			expected: "telREQUIRES_NETWORK_ID",
+		},
+		{
+			name:     "TelWRONG_NETWORK",
+			txResult: TelWRONG_NETWORK,
+			expected: "telWRONG_NETWORK",
+		},
+
+		// Tem Codes
+		{
+			name:     "TemBAD_AMM_TOKENS",
+			txResult: TemBAD_AMM_TOKENS,
+			expected: "temBAD_AMM_TOKENS",
+		},
+		{
+			name:     "TemBAD_AMOUNT",
+			txResult: TemBAD_AMOUNT,
+			expected: "temBAD_AMOUNT",
+		},
+		{
+			name:     "TemBAD_AUTH_MASTER",
+			txResult: TemBAD_AUTH_MASTER,
+			expected: "temBAD_AUTH_MASTER",
+		},
+		{
+			name:     "TemBAD_CURRENCY",
+			txResult: TemBAD_CURRENCY,
+			expected: "temBAD_CURRENCY",
+		},
+		{
+			name:     "TemBAD_EXPIRATION",
+			txResult: TemBAD_EXPIRATION,
+			expected: "temBAD_EXPIRATION",
+		},
+		{
+			name:     "TemBAD_FEE",
+			txResult: TemBAD_FEE,
+			expected: "temBAD_FEE",
+		},
+		{
+			name:     "TemBAD_ISSUER",
+			txResult: TemBAD_ISSUER,
+			expected: "temBAD_ISSUER",
+		},
+		{
+			name:     "TemBAD_LIMIT",
+			txResult: TemBAD_LIMIT,
+			expected: "temBAD_LIMIT",
+		},
+		{
+			name:     "TemBAD_NFTOKEN_TRANSFER_FEE",
+			txResult: TemBAD_NFTOKEN_TRANSFER_FEE,
+			expected: "temBAD_NFTOKEN_TRANSFER_FEE",
+		},
+		{
+			name:     "TemBAD_OFFER",
+			txResult: TemBAD_OFFER,
+			expected: "temBAD_OFFER",
+		},
+		{
+			name:     "TemBAD_PATH",
+			txResult: TemBAD_PATH,
+			expected: "temBAD_PATH",
+		},
+		{
+			name:     "TemBAD_PATH_LOOP",
+			txResult: TemBAD_PATH_LOOP,
+			expected: "temBAD_PATH_LOOP",
+		},
+		{
+			name:     "TemBAD_SEND_XRP_LIMIT",
+			txResult: TemBAD_SEND_XRP_LIMIT,
+			expected: "temBAD_SEND_XRP_LIMIT",
+		},
+		{
+			name:     "TemBAD_SEND_XRP_MAX",
+			txResult: TemBAD_SEND_XRP_MAX,
+			expected: "temBAD_SEND_XRP_MAX",
+		},
+		{
+			name:     "TemBAD_SEND_XRP_NO_DIRECT",
+			txResult: TemBAD_SEND_XRP_NO_DIRECT,
+			expected: "temBAD_SEND_XRP_NO_DIRECT",
+		},
+		{
+			name:     "TemBAD_SEND_XRP_PARTIAL",
+			txResult: TemBAD_SEND_XRP_PARTIAL,
+			expected: "temBAD_SEND_XRP_PARTIAL",
+		},
+		{
+			name:     "TemBAD_SEND_XRP_PATHS",
+			txResult: TemBAD_SEND_XRP_PATHS,
+			expected: "temBAD_SEND_XRP_PATHS",
+		},
+		{
+			name:     "TemBAD_SEQUENCE",
+			txResult: TemBAD_SEQUENCE,
+			expected: "temBAD_SEQUENCE",
+		},
+		{
+			name:     "TemBAD_SIGNATURE",
+			txResult: TemBAD_SIGNATURE,
+			expected: "temBAD_SIGNATURE",
+		},
+		{
+			name:     "TemBAD_SRC_ACCOUNT",
+			txResult: TemBAD_SRC_ACCOUNT,
+			expected: "temBAD_SRC_ACCOUNT",
+		},
+		{
+			name:     "TemBAD_TRANSFER_RATE",
+			txResult: TemBAD_TRANSFER_RATE,
+			expected: "temBAD_TRANSFER_RATE",
+		},
+		{
+			name:     "TemCANNOT_PREAUTH_SELF",
+			txResult: TemCANNOT_PREAUTH_SELF,
+			expected: "temCANNOT_PREAUTH_SELF",
+		},
+		{
+			name:     "TemDST_IS_SRC",
+			txResult: TemDST_IS_SRC,
+			expected: "temDST_IS_SRC",
+		},
+		{
+			name:     "TemDST_NEEDED",
+			txResult: TemDST_NEEDED,
+			expected: "temDST_NEEDED",
+		},
+		{
+			name:     "TemINVALID",
+			txResult: TemINVALID,
+			expected: "temINVALID",
+		},
+		{
+			name:     "TemINVALID_COUNT",
+			txResult: TemINVALID_COUNT,
+			expected: "temINVALID_COUNT",
+		},
+		{
+			name:     "TemINVALID_FLAG",
+			txResult: TemINVALID_FLAG,
+			expected: "temINVALID_FLAG",
+		},
+		{
+			name:     "TemMALFORMED",
+			txResult: TemMALFORMED,
+			expected: "temMALFORMED",
+		},
+		{
+			name:     "TemREDUNDANT",
+			txResult: TemREDUNDANT,
+			expected: "temREDUNDANT",
+		},
+		{
+			name:     "TemREDUNDANT_SEND_MAX",
+			txResult: TemREDUNDANT_SEND_MAX,
+			expected: "temREDUNDANT_SEND_MAX",
+		},
+		{
+			name:     "TemRIPPLE_EMPTY",
+			txResult: TemRIPPLE_EMPTY,
+			expected: "temRIPPLE_EMPTY",
+		},
+		{
+			name:     "TemBAD_WEIGHT",
+			txResult: TemBAD_WEIGHT,
+			expected: "temBAD_WEIGHT",
+		},
+		{
+			name:     "TemBAD_SIGNER",
+			txResult: TemBAD_SIGNER,
+			expected: "temBAD_SIGNER",
+		},
+		{
+			name:     "TemBAD_QUORUM",
+			txResult: TemBAD_QUORUM,
+			expected: "temBAD_QUORUM",
+		},
+		{
+			name:     "TemUNCERTAIN",
+			txResult: TemUNCERTAIN,
+			expected: "temUNCERTAIN",
+		},
+		{
+			name:     "TemUNKNOWN",
+			txResult: TemUNKNOWN,
+			expected: "temUNKNOWN",
+		},
+		{
+			name:     "TemDISABLED",
+			txResult: TemDISABLED,
+			expected: "temDISABLED",
+		},
+
+		// Ter codes
+		{
+			name:     "TerFUNDS_SPENT",
+			txResult: TerFUNDS_SPENT,
+			expected: "terFUNDS_SPENT",
+		},
+		{
+			name:     "TerINSUF_FEE_B",
+			txResult: TerINSUF_FEE_B,
+			expected: "terINSUF_FEE_B",
+		},
+		{
+			name:     "TerLAST",
+			txResult: TerLAST,
+			expected: "terLAST",
+		},
+		{
+			name:     "TerNO_ACCOUNT",
+			txResult: TerNO_ACCOUNT,
+			expected: "terNO_ACCOUNT",
+		},
+		{
+			name:     "TerNO_AMM",
+			txResult: TerNO_AMM,
+			expected: "terNO_AMM",
+		},
+		{
+			name:     "TerNO_AUTH",
+			txResult: TerNO_AUTH,
+			expected: "terNO_AUTH",
+		},
+		{
+			name:     "TerNO_LINE",
+			txResult: TerNO_LINE,
+			expected: "terNO_LINE",
+		},
+		{
+			name:     "TerNO_RIPPLE",
+			txResult: TerNO_RIPPLE,
+			expected: "terNO_RIPPLE",
+		},
+		{
+			name:     "TerOWNERS",
+			txResult: TerOWNERS,
+			expected: "terOWNERS",
+		},
+		{
+			name:     "TerPRE_SEQ",
+			txResult: TerPRE_SEQ,
+			expected: "terPRE_SEQ",
+		},
+		{
+			name:     "TerPRE_TICKET",
+			txResult: TerPRE_TICKET,
+			expected: "terPRE_TICKET",
+		},
+		{
+			name:     "TerQUEUED",
+			txResult: TerQUEUED,
+			expected: "terQUEUED",
+		},
+		{
+			name:     "TerRETRY",
+			txResult: TerRETRY,
+			expected: "terRETRY",
+		},
+		{
+			name:     "TerSUBMITTED",
+			txResult: TerSUBMITTED,
+			expected: "terSUBMITTED",
+		},
+		// Tes codes
+		{
+			name:     "TesSUCCESS",
+			txResult: TesSUCCESS,
+			expected: "tesSUCCESS",
+		},
 	}
 	for _, test := range tests {
 		t.Run(test.name, func(t *testing.T) {


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>xrpl/transaction/results.go (1)</summary><blockquote>

`6-7`: **Consider re-enabling or justifying lint/security checks.**  
Disabling `revive` var-naming and `#nosec G101` could overlook potential improvements or security vulnerabilities. If the naming or security concerns are not critical, you may consider re-enabling them or documenting more details about why they must remain disabled.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between c32ccecd79bbca63fddd7a2704d7c2c9ec41a4d8 and e7f856eaa30b1f94f8765e8cc02950705c089d85.

</details>

<details>
<summary>📒 Files selected for processing (5)</summary>

* `binary-codec/definitions/definitions_test.go` (2 hunks)
* `binary-codec/definitions/helpers_test.go` (3 hunks)
* `xrpl/testutil/integration/runner.go` (1 hunks)
* `xrpl/transaction/results.go` (1 hunks)
* `xrpl/transaction/results_test.go` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Definitions (1)</summary>

<details>
<summary>xrpl/transaction/results_test.go (1)</summary><blockquote>

<details>
<summary>xrpl/transaction/results.go (144)</summary>

* `TecAMM_ACCOUNT` (18-18)
* `TecAMM_UNFUNDED` (21-21)
* `TecAMM_BALANCE` (24-24)
* `TecAMM_EMPTY` (27-27)
* `TecAMM_FAILED` (30-30)
* `TecAMM_INVALID_TOKENS` (33-33)
* `TecAMM_NOT_EMPTY` (36-36)
* `TecCANT_ACCEPT_OWN_NFTOKEN_OFFER` (39-39)
* `TecCLAIM` (42-42)
* `TecCRYPTOCONDITION_ERROR` (45-45)
* `TecDIR_FULL` (48-48)
* `TecDUPLICATE` (51-51)
* `TecDST_TAG_NEEDED` (54-54)
* `TecEMPTY_DID` (57-57)
* `TecEXPIRED` (60-60)
* `TecFAILED_PROCESSING` (63-63)
* `TecFROZEN` (66-66)
* `TecHAS_OBLIGATIONS` (69-69)
* `TecINSUF_RESERVE_LINE` (72-72)
* `TecINSUF_RESERVE_OFFER` (75-75)
* `TecINSUFF_FEE` (78-78)
* `TecINSUFFICIENT_FUNDS` (81-81)
* `TecINSUFFICIENT_PAYMENT` (84-84)
* `TecINSUFFICIENT_RESERVE` (87-87)
* `TecINTERNAL` (90-90)
* `TecINVARIANT_FAILED` (93-93)
* `TecKILLED` (96-96)
* `TecMAX_SEQUENCE_REACHED` (99-99)
* `TecNEED_MASTER_KEY` (102-102)
* `TecNFTOKEN_BUY_SELL_MISMATCH` (105-105)
* `TecNFTOKEN_OFFER_TYPE_MISMATCH` (108-108)
* `TecNO_ALTERNATIVE_KEY` (111-111)
* `TecNO_AUTH` (114-114)
* `TecNO_DST` (117-117)
* `TecNO_DST_INSUF_XRP` (120-120)
* `TecNO_ENTRY` (123-123)
* `TecNO_ISSUER` (126-126)
* `TecNO_LINE` (129-129)
* `TecNO_LINE_INSUF_RESERVE` (132-132)
* `TecNO_LINE_REDUNDANT` (135-135)
* `TecNO_PERMISSION` (138-138)
* `TecNO_REGULAR_KEY` (141-141)
* `TecNO_SUITABLE_NFTOKEN_PAGE` (144-144)
* `TecNO_TARGET` (147-147)
* `TecOBJECT_NOT_FOUND` (150-150)
* `TecOVERSIZE` (153-153)
* `TecOWNERS` (156-156)
* `TecPATH_DRY` (159-159)
* `TecPATH_PARTIAL` (162-162)
* `TecTOO_SOON` (165-165)
* `TecUNFUNDED` (168-168)
* `TecUNFUNDED_ADD` (171-171)
* `TecUNFUNDED_PAYMENT` (174-174)
* `TecUNFUNDED_OFFER` (177-177)
* `TefALREADY` (189-189)
* `TefBAD_ADD_AUTH` (192-192)
* `TefBAD_AUTH` (195-195)
* `TefBAD_AUTH_MASTER` (198-198)
* `TefBAD_LEDGER` (201-201)
* `TefBAD_QUORUM` (204-204)
* `TefBAD_SIGNATURE` (207-207)
* `TefCREATED` (210-210)
* `TefEXCEPTION` (213-213)
* `TefFAILURE` (216-216)
* `TefINTERNAL` (219-219)
* `TefINVARIANT_FAILED` (222-222)
* `TefMASTER_DISABLED` (225-225)
* `TefMAX_LEDGER` (228-228)
* `TefNFTOKEN_IS_NOT_TRANSFERABLE` (231-231)
* `TefNO_AUTH_REQUIRED` (234-234)
* `TefNO_TICKET` (237-237)
* `TefNOT_MULTI_SIGNING` (240-240)
* `TefPAST_SEQ` (243-243)
* `TefTOO_BIG` (246-246)
* `TefWRONG_PRIOR` (249-249)
* `TelBAD_DOMAIN` (258-258)
* `TelBAD_PATH_COUNT` (261-261)
* `TelBAD_PUBLIC_KEY` (264-264)
* `TelCAN_NOT_QUEUE` (267-267)
* `TelCAN_NOT_QUEUE_BALANCE` (270-270)
* `TelCAN_NOT_QUEUE_BLOCKS` (273-273)
* `TelCAN_NOT_QUEUE_BLOCKED` (276-276)
* `TelCAN_NOT_QUEUE_FEE` (279-279)
* `TelCAN_NOT_QUEUE_FULL` (282-282)
* `TelFAILED_PROCESSING` (285-285)
* `TelINSUF_FEE_P` (288-288)
* `TelLOCAL_ERROR` (291-291)
* `TelNETWORK_ID_MAKES_TX_NON_CANONICAL` (294-294)
* `TelNO_DST_PARTIAL` (297-297)
* `TelREQUIRES_NETWORK_ID` (300-300)
* `TelWRONG_NETWORK` (303-303)
* `TemBAD_AMM_TOKENS` (313-313)
* `TemBAD_AMOUNT` (316-316)
* `TemBAD_AUTH_MASTER` (319-319)
* `TemBAD_CURRENCY` (322-322)
* `TemBAD_EXPIRATION` (325-325)
* `TemBAD_FEE` (328-328)
* `TemBAD_ISSUER` (331-331)
* `TemBAD_LIMIT` (334-334)
* `TemBAD_NFTOKEN_TRANSFER_FEE` (337-337)
* `TemBAD_OFFER` (340-340)
* `TemBAD_PATH` (343-343)
* `TemBAD_PATH_LOOP` (346-346)
* `TemBAD_SEND_XRP_LIMIT` (349-349)
* `TemBAD_SEND_XRP_MAX` (352-352)
* `TemBAD_SEND_XRP_NO_DIRECT` (355-355)
* `TemBAD_SEND_XRP_PARTIAL` (358-358)
* `TemBAD_SEND_XRP_PATHS` (361-361)
* `TemBAD_SEQUENCE` (364-364)
* `TemBAD_SIGNATURE` (367-367)
* `TemBAD_SRC_ACCOUNT` (370-370)
* `TemBAD_TRANSFER_RATE` (373-373)
* `TemCANNOT_PREAUTH_SELF` (376-376)
* `TemDST_IS_SRC` (379-379)
* `TemDST_NEEDED` (382-382)
* `TemINVALID` (385-385)
* `TemINVALID_COUNT` (388-388)
* `TemINVALID_FLAG` (391-391)
* `TemMALFORMED` (394-394)
* `TemREDUNDANT` (397-397)
* `TemREDUNDANT_SEND_MAX` (400-400)
* `TemRIPPLE_EMPTY` (403-403)
* `TemBAD_WEIGHT` (406-406)
* `TemBAD_SIGNER` (409-409)
* `TemBAD_QUORUM` (412-412)
* `TemUNCERTAIN` (415-415)
* `TemUNKNOWN` (418-418)
* `TemDISABLED` (421-421)
* `TerFUNDS_SPENT` (431-431)
* `TerINSUF_FEE_B` (434-434)
* `TerLAST` (437-437)
* `TerNO_ACCOUNT` (440-440)
* `TerNO_AMM` (443-443)
* `TerNO_AUTH` (446-446)
* `TerNO_LINE` (449-449)
* `TerNO_RIPPLE` (452-452)
* `TerOWNERS` (455-455)
* `TerPRE_SEQ` (458-458)
* `TerPRE_TICKET` (461-461)
* `TerQUEUED` (464-464)
* `TerRETRY` (467-467)
* `TerSUBMITTED` (470-470)
* `TesSUCCESS` (478-478)
* `t` (482-484)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>🔇 Additional comments (18)</summary><blockquote>

<details>
<summary>xrpl/transaction/results.go (5)</summary>

`9-9`: **No issues with the new const block.**  
This approach is a standard way to define constants for transaction results, maintaining clarity and consistency.

---

`180-229`: **`tef` codes addition looks good.**  
These new `tef` codes broaden the coverage for failed transactions that do not get included in a ledger. They appear well-aligned with standard XRPL guidelines.

---

`257-304`: **`tel` codes addition is well-structured.**  
These `tel` codes capture local server processing errors accurately. No immediate concerns.

---

`312-422`: **`tem` codes expansion appears consistent.**  
The new `tem` codes for malformed transactions seem logically enumerated. Great job extending coverage.

---

`424-479`: **`ter` and final `tesSUCCESS` codes updated successfully.**  
The newly introduced `ter` codes flag transactions requiring retries, and `tesSUCCESS` remains the final success indicator. This comprehensive enumeration should enhance result-handling clarity.

</details>
<details>
<summary>xrpl/testutil/integration/runner.go (1)</summary>

`134-134`: **Replacing hardcoded string with constant reference is a best practice.**  
Using `transaction.TefPAST_SEQ.String()` increases clarity and maintainability, avoiding string literal mismatches in the future.

</details>
<details>
<summary>binary-codec/definitions/helpers_test.go (3)</summary>

`6-6`: **New import for `transaction` aligns with constant usage.**  
Importing the `transaction` package facilitates referencing the enumerated result codes consistently rather than using hardcoded strings.

---

`466-466`: **Switched from a hardcoded string to `TecCLAIM.String()`.**  
Good move to keep test expectations consistent with well-defined constants. This prevents typos and ensures changes in the codebase are automatically reflected in tests.

---

`503-503`: **Expanding test coverage with `TecCLAIM.String()` usage.**  
Using the constant’s string value simplifies ongoing maintenance and reduces the risk of string mismatches.

</details>
<details>
<summary>binary-codec/definitions/definitions_test.go (2)</summary>

`3-8`: **Good use of imports for constants**

Importing the transaction package to use constants instead of hardcoded strings is a good practice. This improves maintainability and reduces the risk of typos.

---

`15-15`: **Excellent refactoring to use constant**

Replacing the hardcoded string with `transaction.TelLOCAL_ERROR.String()` is an excellent improvement. This ensures consistency throughout the codebase and centralizes the definition of transaction result codes.

</details>
<details>
<summary>xrpl/transaction/results_test.go (7)</summary>

`15-69`: **Well-structured Tec error code tests**

The comprehensive test suite for Tec error codes is well-organized and follows a consistent pattern. Including all these transaction result codes improves test coverage and ensures the String() method works as expected for all defined codes.

---

`71-92`: **Good implementation of Tef error code tests**

The test cases for Tef error codes are properly structured and comprehensive, covering all the defined Tef error constants from the transaction package.

---

`94-110`: **Complete coverage of Tel error codes**

The test cases thoroughly cover all Tel error codes, including the TelLOCAL_ERROR that was referenced in the definitions_test.go file.

---

`112-149`: **Comprehensive Tem error code tests**

All Tem error codes are properly tested, including specialized error codes like TemBAD_AMM_TOKENS and TemREDUNDANT_SEND_MAX which were noted in the PR objectives as having inconsistencies with xrpl.js.

---

`151-165`: **Complete Ter error code test coverage**

The test cases for Ter error codes are well implemented, including TerSUBMITTED which was mentioned in the PR objectives as not being present in xrpl.js.

---

`167-172`: **Maintained existing test for TesSUCCESS**

Good job maintaining the existing test case format for TesSUCCESS while updating the structure for all other test cases.

---

`174-179`: **Effective test iteration approach**

The test iteration logic is efficient and ensures each transaction result code's String() method returns the expected value.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-24T16:54:44Z
user: login: GuillemGarciaDev
state: CHANGES_REQUESTED
author_association: NONE
submitted_at: 2025-03-25T17:11:56Z
user: login: GuillemGarciaDev
state: APPROVED
author_association: NONE
submitted_at: 2025-03-26T16:45:20Z
user: login: GuillemGarciaDev
body: Cal afegir al `CHANGELOG.md` els canvis com a `[Unreleased]`
state: CHANGES_REQUESTED
author_association: NONE
submitted_at: 2025-03-26T16:45:52Z
user: login: GuillemGarciaDev
state: APPROVED
author_association: NONE
submitted_at: 2025-03-27T10:14:08Z

Review comments:
diff_hunk: @@ -3,45 +3,479 @@ package transaction
 // TxResult represents the result code of a transaction
 type TxResult string
 
-const (
-	// Success results - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tes-success
-
-	// The transaction was applied and forwarded to other servers.
-	// If this appears in a validated ledger, then the transaction's success is final.
-	TesSUCCESS TxResult = "tesSUCCESS"
+//revive:disable:var-naming
+// #nosec G101
 
-	// ------------------------------------------------------------------------------------------------
+const (
 	// tec codes ⬇️ - https://xrpl.org/docs/references/protocol/transactions/transaction-results/tec-codes
 
 	// These codes indicate that the transaction failed, but it was applied to a ledger to apply the transaction cost. They have numerical values in the range 100 to 199. It is recommended to use the text code, not the numeric value.
 
 	// Transactions with tec codes destroy the XRP paid as a transaction cost, and consume a sequence number. For the most part, the transactions take no other action, but there are some exceptions. For example, a transaction that results in tecOVERSIZE still cleans up some unfunded offers. Always look at the transaction metadata to see precisely what a transaction did.
 	// ------------------------------------------------------------------------------------------------
 
-	// The transaction tried to create an object (such as an Offer or a Check) whose provided Expiration time has already passed.
-	TecEXPIRED   TxResult = "tecEXPIRED"
+	// The transaction failed because the operation is not allowed on Automated Market Maker (AMM) accounts. (Added by the AMM amendment)
+	TecAMM_ACCOUNT TxResult = "tecAMM_ACCOUNT"
+
+	// The AMMCreate transaction failed because the sender does not have enough of the specified assets to fund it. (Added by the AMM amendment)
+	TecAMM_UNFUNDED TxResult = "tecAMM_UNFUNDED"
+
+	// The AMMDeposit or AMMWithdraw transaction failed because either the AMM or the user does not hold enough of one of the specified assets. (Added by the AMM amendment)
+	TecAMM_BALANCE TxResult = "tecAMM_BALANCE"
+
+	// The AMM-related transaction failed because the AMM has no assets in its pool. In this state, you can only delete the AMM or fund it with a new deposit. (Added by the AMM amendment)
+	TecAMM_EMPTY TxResult = "tecAMM_EMPTY"
+
+	// The AMM-related transaction failed due to asset availability or pricing constraints. (Added by the AMM amendment)
+	TecAMM_FAILED TxResult = "tecAMM_FAILED"
+
+	// The AMM-related transaction failed due to insufficient LP Tokens or problems with rounding. (Added by the AMM amendment)
+	TecAMM_INVALID_TOKENS TxResult = "tecAMM_INVALID_TOKENS"
+
+	// The transaction was meant to operate on an AMM with empty asset pools, but the specified AMM currently holds assets. (Added by the AMM amendment)
+	TecAMM_NOT_EMPTY TxResult = "tecAMM_NOT_EMPTY"
+
+	// The transaction tried to accept an offer placed by the same account to buy or sell an NFToken. (Added by the NonFungibleTokensV1_1 amendment)
+	TecCANT_ACCEPT_OWN_NFTOKEN_OFFER TxResult = "tecCANT_ACCEPT_OWN_NFTOKEN_OFFER"
+
+	// Unspecified failure, with transaction cost destroyed.
+	TecCLAIM TxResult = "tecCLAIM"
+
+	// This EscrowCreate or EscrowFinish transaction contained a malformed or mismatched crypto-condition.
+	TecCRYPTOCONDITION_ERROR TxResult = "tecCRYPTOCONDITION_ERROR"
+
+	// The transaction tried to add an object to an account's owner directory, but the directory is full.
+	TecDIR_FULL TxResult = "tecDIR_FULL"
+
+	// The transaction tried to create an object that already exists.
 	TecDUPLICATE TxResult = "tecDUPLICATE"
 
+	// The Payment transaction omitted a destination tag, but the destination account requires one.
+	TecDST_TAG_NEEDED TxResult = "tecDST_TAG_NEEDED"
+
+	// The transaction tried to create a DID entry with no contents. (Added by the DID amendment)
+	TecEMPTY_DID TxResult = "tecEMPTY_DID"
+
+	// The transaction tried to create an object whose provided Expiration time has already passed.
+	TecEXPIRED TxResult = "tecEXPIRED"
+
+	// An unspecified error occurred when processing the transaction.
+	TecFAILED_PROCESSING TxResult = "tecFAILED_PROCESSING"
+
+	// The OfferCreate transaction failed because one or both of the assets involved are subject to a global freeze.
+	TecFROZEN TxResult = "tecFROZEN"
+
+	// The AccountDelete transaction failed because the account owns objects that cannot be deleted.
+	TecHAS_OBLIGATIONS TxResult = "tecHAS_OBLIGATIONS"
+
+	// The transaction failed due to insufficient XRP to create a new trust line.
+	TecINSUF_RESERVE_LINE TxResult = "tecINSUF_RESERVE_LINE"
+
+	// The transaction failed due to insufficient XRP to create a new Offer.
+	TecINSUF_RESERVE_OFFER TxResult = "tecINSUF_RESERVE_OFFER"
+
+	// The transaction failed because the sending account does not have enough XRP to pay the transaction cost specified.
+	TecINSUFF_FEE TxResult = "tecINSUFF_FEE"
+
+	// One of the accounts involved does not hold enough of a necessary asset. (Added by the NonFungibleTokensV1_1 amendment)
+	TecINSUFFICIENT_FUNDS TxResult = "tecINSUFFICIENT_FUNDS"
+
+	// The amount specified is not enough to pay all fees involved in the transaction. (Added by the NonFungibleTokensV1_1 amendment)
+	TecINSUFFICIENT_PAYMENT TxResult = "tecINSUFFICIENT_PAYMENT"
+
+	// The transaction would increase the reserve requirement higher than the sending account's balance.
+	TecINSUFFICIENT_RESERVE TxResult = "tecINSUFFICIENT_RESERVE"
+
+	// Unspecified internal error, with transaction cost applied. Should not normally be returned.
+	TecINTERNAL TxResult = "tecINTERNAL"
+
+	// An invariant check failed when executing this transaction. (EnforceInvariants amendment)
+	TecINVARIANT_FAILED TxResult = "tecINVARIANT_FAILED"
+
+	// The OfferCreate transaction specified tfFillOrKill and could not be filled.
+	TecKILLED TxResult = "tecKILLED"
+
+	// A sequence number field is already at its maximum. (Added by NonFungibleTokensV1_1 amendment)
+	TecMAX_SEQUENCE_REACHED TxResult = "tecMAX_SEQUENCE_REACHED"
+
+	// Transaction tried to cause changes requiring the master key.
+	TecNEED_MASTER_KEY TxResult = "tecNEED_MASTER_KEY"
+
+	// NFTokenAcceptOffer attempted to match incompatible buy/sell offers.
+	TecNFTOKEN_BUY_SELL_MISMATCH TxResult = "tecNFTOKEN_BUY_SELL_MISMATCH"
+
+	// Offer type mismatch in NFTokenAcceptOffer transaction.
+	TecNFTOKEN_OFFER_TYPE_MISMATCH TxResult = "tecNFTOKEN_OFFER_TYPE_MISMATCH"
+
+	// The transaction tried to remove the only available method of authorizing transactions. (Prior to rippled 0.30.0, this was called tecMASTER_DISABLED.)
+	TecNO_ALTERNATIVE_KEY TxResult = "tecNO_ALTERNATIVE_KEY"
+
+	// The transaction failed because it needs to add a balance on a trust line to an account with the lsfRequireAuth flag enabled, and that trust line has not been authorized.
+	TecNO_AUTH TxResult = "tecNO_AUTH"
+
+	// The account on the receiving end of the transaction does not exist.
+	TecNO_DST TxResult = "tecNO_DST"
+
+	// The account on the receiving end does not exist, and the transaction does not send enough XRP to create it.
+	TecNO_DST_INSUF_XRP TxResult = "tecNO_DST_INSUF_XRP"
+
+	// The transaction tried to modify a ledger object, but the specified object does not exist.
+	TecNO_ENTRY TxResult = "tecNO_ENTRY"
+
+	// The account specified as issuer of a currency does not exist.
+	TecNO_ISSUER TxResult = "tecNO_ISSUER"
+
+	// The TakerPays field specifies an asset requiring authorization, but the account lacks a trust line.
+	TecNO_LINE TxResult = "tecNO_LINE"
+
+	// Insufficient XRP reserve to create a new trust line; the counterparty has no trust line.
+	TecNO_LINE_INSUF_RESERVE TxResult = "tecNO_LINE_INSUF_RESERVE"
+
+	// The transaction attempted to set a trust line to its default state, but it didn't exist.
+	TecNO_LINE_REDUNDANT TxResult = "tecNO_LINE_REDUNDANT"
+
+	// The sender lacks permission to execute the requested operation.
+	TecNO_PERMISSION TxResult = "tecNO_PERMISSION"
+
+	// Attempted to disable the master key, but no alternative method exists.
+	TecNO_REGULAR_KEY TxResult = "tecNO_REGULAR_KEY"
+
+	// No available directory page to hold the minted/acquired NFToken. (Added by the NonFungibleTokensV1_1 amendment)
+	TecNO_SUITABLE_NFTOKEN_PAGE TxResult = "tecNO_SUITABLE_NFTOKEN_PAGE"
+
+	// The referenced Escrow or PayChannel ledger object doesn't exist or has already been deleted.
+	TecNO_TARGET TxResult = "tecNO_TARGET"
+
+	// An object specified in this transaction did not exist in the ledger. (Added by NonFungibleTokensV1_1 amendment)
+	TecOBJECT_NOT_FOUND TxResult = "tecOBJECT_NOT_FOUND"
+
+	// The transaction created excessively large metadata.
+	TecOVERSIZE TxResult = "tecOVERSIZE"
+
+	// The transaction cannot succeed because the sender already owns ledger objects.
+	TecOWNERS TxResult = "tecOWNERS"
+
+	// Provided paths lack enough liquidity to send any amount at all.
+	TecPATH_DRY TxResult = "tecPATH_DRY"
+
+	// Provided paths lack enough liquidity to send the full requested amount.
+	TecPATH_PARTIAL TxResult = "tecPATH_PARTIAL"
+
+	// Account deletion failed due to a sequence number being too recent.
+	TecTOO_SOON TxResult = "tecTOO_SOON"
+
+	// Insufficient XRP to cover the transaction amount plus reserve requirements.
+	TecUNFUNDED TxResult = "tecUNFUNDED"
+
+	// DEPRECATED.
+	TecUNFUNDED_ADD TxResult = "tecUNFUNDED_ADD"
+
+	// Attempted payment exceeds the sender’s XRP holdings.
+	TecUNFUNDED_PAYMENT TxResult = "tecUNFUNDED_PAYMENT"
+
+	// Offer creation failed due to lack of the TakerGets currency.
+	TecUNFUNDED_OFFER TxResult = "tecUNFUNDED_OFFER"
+
path: xrpl/transaction/results.go
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**Verify completeness and usage of newly introduced `tec` codes.**  
A large block of new `tec` codes has been added for AMM and NFT scenarios. The definitions appear consistent, but please ensure you've covered every scenario necessitated by the XRPL documentation or protocol specs.  

You can cross-check references to these codes by running the following script to see every place they are used in the codebase versus their definitions:

---

🏁 Script executed:

```shell
#!/bin/bash
# Search for references to newly added tec codes in the codebase and print surrounding lines for context.
rg -A 3 -B 3 "tecAMM_|TecCANT_ACCEPT_OWN_NFTOKEN_OFFER|TecCLAIM|TecCRYPTOCONDITION_ERROR|TecDIR_FULL|TecDST_TAG_NEEDED|TecEMPTY_DID|TecEXPIRED|TecFAILED_PROCESSING|TecFROZEN|TecHAS_OBLIGATIONS|TecINSUF_RESERVE_LINE|TecINSUF_RESERVE_OFFER|TecINSUFF_FEE|TecINSUFFICIENT_FUNDS|TecINSUFFICIENT_PAYMENT|TecINSUFFICIENT_RESERVE|TecINTERNAL|TecINVARIANT_FAILED|TecKILLED|TecMAX_SEQUENCE_REACHED|TecNEED_MASTER_KEY|TecNFTOKEN_BUY_SELL_MISMATCH|TecNFTOKEN_OFFER_TYPE_MISMATCH|TecNO_ALTERNATIVE_KEY|TecNO_AUTH|TecNO_DST|TecNO_DST_INSUF_XRP|TecNO_ENTRY|TecNO_ISSUER|TecNO_LINE|TecNO_LINE_INSUF_RESERVE|TecNO_LINE_REDUNDANT|TecNO_PERMISSION|TecNO_REGULAR_KEY|TecNO_SUITABLE_NFTOKEN_PAGE|TecNO_TARGET|TecOBJECT_NOT_FOUND|TecOVERSIZE|TecOWNERS|TecPATH_DRY|TecPATH_PARTIAL|TecTOO_SOON|TecUNFUNDED|TecUNFUNDED_ADD|TecUNFUNDED_PAYMENT|TecUNFUNDED_OFFER"
```

Length of output: 21654

---



</details>

**TEC Code Verification: Alignment of Naming Conventions Needed**

The new AMM and NFT-related `tec` codes appear to be fully referenced and exercised across the codebase (as confirmed by the tests and integration references). However, one potential issue requires attention:

- **Naming inconsistency for the AMM unfunded code:**  
  In `xrpl/transaction/results.go`, the constant is defined as  
  `TecAMM_UNFUNDED TxResult = "tecAMM_UNFUNDED"`  
  and tests reference it accordingly. In contrast, the mapping in `binary-codec/definitions/definitions.json` uses the key `"tecUNFUNDED_AMM"`.  
  Please review whether this discrepancy is intentional or if the two should be renamed for consistency with XRPL documentation and protocol specifications.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-24T16:54:43Z
author_association: NONE
diff_hunk: @@ -3,6 +3,7 @@ package definitions
 import (
 	"testing"
 
+	"github.com/Peersyst/xrpl-go/xrpl/transaction"
path: binary-codec/definitions/helpers_test.go
user: login: GuillemGarciaDev
body: El package de `xrpl` no s'ha d'importar a cap package del projecte. pot generar dependencies circulars
created_at: 2025-03-25T17:01:26Z
author_association: NONE
diff_hunk: @@ -462,7 +463,7 @@ func TestGetTransactionResultNameByTransactionResultTypeCode(t *testing.T) {
 		{
 			description:   "correct TransactionResultName",
 			input:         100,
-			expected:      "tecCLAIM",
+			expected:      transaction.TecCLAIM.String(),
path: binary-codec/definitions/helpers_test.go
user: login: GuillemGarciaDev
body: Nomes cal fer refactor dels codes que estiguin dins del package de `xrpl`, la resta no
created_at: 2025-03-25T17:01:53Z
author_association: NONE
diff_hunk: @@ -12,36 +12,169 @@ func TestTxResult_String(t *testing.T) {
 		txResult TxResult
 		expected string
 	}{
+		// Tec codes
+		{"TecAMM_ACCOUNT", TecAMM_ACCOUNT, "tecAMM_ACCOUNT"},
path: xrpl/transaction/results_test.go
user: login: GuillemGarciaDev
body: hem d'intentar mantenir el mateix format de codi al projecte, si a sota estan els tests structs amb field labels aquest tmb ho han de tindre
created_at: 2025-03-25T17:03:57Z
author_association: NONE

PR comments:
user: login: notion-workspace[bot]
created_at: 2025-03-24T16:27:16Z
body: <a href="https://www.notion.so/xrpl-Add-transaction-result-codes-1b921cedf84a80f7afcced64509a4adf?pvs=8&n=github_linkback">[xrpl] Add transaction result codes</a>
author_association: NONE
user: login: coderabbitai[bot]
created_at: 2025-03-24T16:27:20Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: skip review by coderabbit.ai -->

> [!IMPORTANT]
> ## Review skipped
> 
> Auto reviews are disabled on base/target branches other than the default branch.
> 
> 
> 
> Please check the settings in the CodeRabbit UI or the `.coderabbit.yaml` file in this repository. To trigger a single review, invoke the `@coderabbitai review` command.
> 
> You can disable this status message by setting the `reviews.review_status` to `false` in the CodeRabbit configuration file.

<!-- end of auto-generated comment: skip review by coderabbit.ai -->
<!-- walkthrough_start -->

<details>
<summary>📝 Walkthrough</summary>

## Walkthrough

This pull request updates multiple files to replace hardcoded string literals with defined constants from the transaction package. Test assertions in several test files now use the constant’s string value, and a new import has been added to support this change. In addition, the transaction processing logic in the Runner has been modified to compare using the constant. A significant extension to the TxResult type has been introduced by adding numerous new transaction result codes, and tests have been updated accordingly to cover the expanded set.

## Changes

| File(s)                                                                                                 | Summary of Changes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|---------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| binary-codec/definitions/definitions_test.go<br>binary-codec/definitions/helpers_test.go                 | Updated tests to replace hardcoded string literals with calls to constants (e.g., `transaction.TelLOCAL_ERROR.String()` and `transaction.TecCLAIM.String()`), and added an import for the transaction package.                                                                                                                                                                                                                                                                                               |
| xrpl/testutil/integration/runner.go                                                                     | Modified the condition in the `processTransaction` method to use `transaction.TefPAST_SEQ.String()` instead of a hardcoded string literal to improve consistency in the control flow.                                                                                                                                                                                                                                                                                                                          |
| xrpl/transaction/results.go                                                                             | Expanded the `TxResult` type by adding numerous new transaction result codes (various Tec, Tef, Tel, Tem, Ter entries) along with updated comments for clearer context.                                                                                                                                                                                                                                                                                                                                     |
| xrpl/transaction/results_test.go                                                                        | Revised the test suite for `TxResult.String()` by adding many new test cases for the expanded result codes and removing some legacy cases to enhance coverage.                                                                                                                                                                                                                                                                                                                                               |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Runner
    participant Engine
    Runner->>Engine: processTransaction(tx)
    Engine-->>Runner: Return result (e.g., transaction.TefPAST_SEQ.String())
    Runner->>Runner: Compare result with expected constant value & check retries
    Runner-->>Runner: Decide to retry or finish processing
```

## Possibly related PRs

- **Peersyst/xrpl-go#108**: Involves modifications to transaction result handling by using constants from the transaction package in test assertions and processing logic.

## Suggested reviewers

- AdriaCarrera
- AgustinMJ
- florent-uzio

</details>

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=Peersyst/xrpl-go&utm_content=125):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai plan` to trigger planning for file edits and PR creation.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: GuillemGarciaDev
created_at: 2025-03-24T16:48:44Z
body: @coderabbitai review
author_association: NONE
user: login: coderabbitai[bot]
created_at: 2025-03-24T16:48:52Z
body: <!-- This is an auto-generated reply by CodeRabbit -->
<details>
<summary>:white_check_mark: Actions performed</summary>

Review triggered.

> Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

</details>
author_association: NONE