initial version of remarks

This commit is contained in:
Richard Holland
2024-03-25 00:54:08 +00:00
parent 88308126cc
commit 7efc26a8b1
12 changed files with 48 additions and 1 deletions

View File

@@ -45,6 +45,7 @@
#include <ripple/app/tx/impl/SetSignerList.h> #include <ripple/app/tx/impl/SetSignerList.h>
#include <ripple/app/tx/impl/SetTrust.h> #include <ripple/app/tx/impl/SetTrust.h>
#include <ripple/app/tx/impl/URIToken.h> #include <ripple/app/tx/impl/URIToken.h>
#include <ripple/app/tx/impl/SetRemarks.h>
namespace ripple { namespace ripple {
@@ -166,6 +167,8 @@ invoke_preflight(PreflightContext const& ctx)
return invoke_preflight_helper<Invoke>(ctx); return invoke_preflight_helper<Invoke>(ctx);
case ttREMIT: case ttREMIT:
return invoke_preflight_helper<Remit>(ctx); return invoke_preflight_helper<Remit>(ctx);
case ttREMARKS_SET:
return invoke_preflight_helper<Remarks>(ctx);
case ttURITOKEN_MINT: case ttURITOKEN_MINT:
case ttURITOKEN_BURN: case ttURITOKEN_BURN:
case ttURITOKEN_BUY: case ttURITOKEN_BUY:
@@ -287,6 +290,8 @@ invoke_preclaim(PreclaimContext const& ctx)
return invoke_preclaim<Invoke>(ctx); return invoke_preclaim<Invoke>(ctx);
case ttREMIT: case ttREMIT:
return invoke_preclaim<Remit>(ctx); return invoke_preclaim<Remit>(ctx);
case ttREMARKS_SET:
return invoke_preclaim<Remarks>(ctx);
case ttURITOKEN_MINT: case ttURITOKEN_MINT:
case ttURITOKEN_BURN: case ttURITOKEN_BURN:
case ttURITOKEN_BUY: case ttURITOKEN_BUY:
@@ -370,6 +375,8 @@ invoke_calculateBaseFee(ReadView const& view, STTx const& tx)
return Invoke::calculateBaseFee(view, tx); return Invoke::calculateBaseFee(view, tx);
case ttREMIT: case ttREMIT:
return Remit::calculateBaseFee(view, tx); return Remit::calculateBaseFee(view, tx);
case ttREMARKS_SET:
return Remarks::calculateBaseFee(view, tx);
case ttURITOKEN_MINT: case ttURITOKEN_MINT:
case ttURITOKEN_BURN: case ttURITOKEN_BURN:
case ttURITOKEN_BUY: case ttURITOKEN_BUY:
@@ -553,6 +560,10 @@ invoke_apply(ApplyContext& ctx)
Remit p(ctx); Remit p(ctx);
return p(); return p();
} }
case ttREMARKS_SET: {
Remarks p(ctx);
return p();
}
case ttURITOKEN_MINT: case ttURITOKEN_MINT:
case ttURITOKEN_BURN: case ttURITOKEN_BURN:
case ttURITOKEN_BUY: case ttURITOKEN_BUY:

View File

@@ -74,7 +74,7 @@ namespace detail {
// Feature.cpp. Because it's only used to reserve storage, and determine how // Feature.cpp. Because it's only used to reserve storage, and determine how
// large to make the FeatureBitset, it MAY be larger. It MUST NOT be less than // large to make the FeatureBitset, it MAY be larger. It MUST NOT be less than
// the actual number of amendments. A LogicError on startup will verify this. // the actual number of amendments. A LogicError on startup will verify this.
static constexpr std::size_t numFeatures = 70; static constexpr std::size_t numFeatures = 71;
/** Amendments that this server supports and the default voting behavior. /** Amendments that this server supports and the default voting behavior.
Whether they are enabled depends on the Rules defined in the validated Whether they are enabled depends on the Rules defined in the validated
@@ -358,6 +358,7 @@ extern uint256 const fixXahauV2;
extern uint256 const featureRemit; extern uint256 const featureRemit;
extern uint256 const featureZeroB2M; extern uint256 const featureZeroB2M;
extern uint256 const fixNSDelete; extern uint256 const fixNSDelete;
extern uint256 const featureRemarks;
} // namespace ripple } // namespace ripple

View File

@@ -458,6 +458,7 @@ extern SF_UINT256 const sfNFTokenID;
extern SF_UINT256 const sfEmitParentTxnID; extern SF_UINT256 const sfEmitParentTxnID;
extern SF_UINT256 const sfEmitNonce; extern SF_UINT256 const sfEmitNonce;
extern SF_UINT256 const sfEmitHookHash; extern SF_UINT256 const sfEmitHookHash;
extern SF_UINT256 const sfObjectID;
// 256-bit (uncommon) // 256-bit (uncommon)
extern SF_UINT256 const sfBookDirectory; extern SF_UINT256 const sfBookDirectory;

View File

@@ -340,6 +340,8 @@ enum TECcodes : TERUnderlyingType {
tecXCHAIN_SELF_COMMIT = 185, // RESERVED - XCHAIN tecXCHAIN_SELF_COMMIT = 185, // RESERVED - XCHAIN
tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR = 186, // RESERVED - XCHAIN tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR = 186, // RESERVED - XCHAIN
tecINSUF_RESERVE_SELLER = 187, tecINSUF_RESERVE_SELLER = 187,
tecIMMUTABLE = 188,
tecTOO_MANY_REMARKS = 189,
tecLAST_POSSIBLE_ENTRY = 255, tecLAST_POSSIBLE_ENTRY = 255,
}; };

View File

@@ -168,6 +168,9 @@ constexpr std::uint32_t const tfURITokenNonMintMask = ~tfUniversal;
// ClaimReward flags: // ClaimReward flags:
constexpr std::uint32_t const tfOptOut = 0x00000001; constexpr std::uint32_t const tfOptOut = 0x00000001;
// Remarks flags:
constexpr std::uint32_t const tfImmutable = 1;
// clang-format on // clang-format on
} // namespace ripple } // namespace ripple

View File

@@ -146,6 +146,9 @@ enum TxType : std::uint16_t
ttURITOKEN_CREATE_SELL_OFFER = 48, ttURITOKEN_CREATE_SELL_OFFER = 48,
ttURITOKEN_CANCEL_SELL_OFFER = 49, ttURITOKEN_CANCEL_SELL_OFFER = 49,
/* A note attaching transactor that allows the owner or issuer (on a object by object basis) to attach remarks */
ttREMARKS_SET = 94,
/* A payment transactor that delivers only the exact amounts specified, creating accounts and TLs as needed /* A payment transactor that delivers only the exact amounts specified, creating accounts and TLs as needed
* that the sender pays for. */ * that the sender pays for. */
ttREMIT = 95, ttREMIT = 95,

View File

@@ -464,6 +464,7 @@ REGISTER_FIX (fixXahauV2, Supported::yes, VoteBehavior::De
REGISTER_FEATURE(Remit, Supported::yes, VoteBehavior::DefaultNo); REGISTER_FEATURE(Remit, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(ZeroB2M, Supported::yes, VoteBehavior::DefaultNo); REGISTER_FEATURE(ZeroB2M, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixNSDelete, Supported::yes, VoteBehavior::DefaultNo); REGISTER_FIX (fixNSDelete, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(Remarks, Supported::yes, VoteBehavior::DefaultNo);
// The following amendments are obsolete, but must remain supported // The following amendments are obsolete, but must remain supported
// because they could potentially get enabled. // because they could potentially get enabled.

View File

@@ -157,6 +157,14 @@ InnerObjectFormats::InnerObjectFormats()
{sfDigest, soeOPTIONAL}, {sfDigest, soeOPTIONAL},
{sfFlags, soeOPTIONAL}, {sfFlags, soeOPTIONAL},
}); });
add(sfRemark.jsonName.c_str(),
sfRemark.getCode(),
{
{sfRemarkName, soeREQUIRED},
{sfRemarkValue, soeREQUIRED},
{sfFlags, soeOPTIONAL},
});
} }
InnerObjectFormats const& InnerObjectFormats const&

View File

@@ -31,6 +31,7 @@ LedgerFormats::LedgerFormats()
{sfLedgerIndex, soeOPTIONAL}, {sfLedgerIndex, soeOPTIONAL},
{sfLedgerEntryType, soeREQUIRED}, {sfLedgerEntryType, soeREQUIRED},
{sfFlags, soeREQUIRED}, {sfFlags, soeREQUIRED},
{sfRemarks, soeOPTIONAL},
}; };
add(jss::AccountRoot, add(jss::AccountRoot,

View File

@@ -210,6 +210,7 @@ CONSTRUCT_TYPED_SFIELD(sfNFTokenID, "NFTokenID", UINT256,
CONSTRUCT_TYPED_SFIELD(sfEmitParentTxnID, "EmitParentTxnID", UINT256, 11); CONSTRUCT_TYPED_SFIELD(sfEmitParentTxnID, "EmitParentTxnID", UINT256, 11);
CONSTRUCT_TYPED_SFIELD(sfEmitNonce, "EmitNonce", UINT256, 12); CONSTRUCT_TYPED_SFIELD(sfEmitNonce, "EmitNonce", UINT256, 12);
CONSTRUCT_TYPED_SFIELD(sfEmitHookHash, "EmitHookHash", UINT256, 13); CONSTRUCT_TYPED_SFIELD(sfEmitHookHash, "EmitHookHash", UINT256, 13);
CONSTRUCT_TYPED_SFIELD(sfObjectID, "ObjectID", UINT256, 14);
// 256-bit (uncommon) // 256-bit (uncommon)
CONSTRUCT_TYPED_SFIELD(sfBookDirectory, "BookDirectory", UINT256, 16); CONSTRUCT_TYPED_SFIELD(sfBookDirectory, "BookDirectory", UINT256, 16);
@@ -290,6 +291,8 @@ CONSTRUCT_TYPED_SFIELD(sfHookReturnString, "HookReturnString", VL,
CONSTRUCT_TYPED_SFIELD(sfHookParameterName, "HookParameterName", VL, 24); CONSTRUCT_TYPED_SFIELD(sfHookParameterName, "HookParameterName", VL, 24);
CONSTRUCT_TYPED_SFIELD(sfHookParameterValue, "HookParameterValue", VL, 25); CONSTRUCT_TYPED_SFIELD(sfHookParameterValue, "HookParameterValue", VL, 25);
CONSTRUCT_TYPED_SFIELD(sfBlob, "Blob", VL, 26); CONSTRUCT_TYPED_SFIELD(sfBlob, "Blob", VL, 26);
CONSTRUCT_TYPED_SFIELD(sfRemarkValue, "RemarkValue", VL, 98);
CONSTRUCT_TYPED_SFIELD(sfRemarkName, "RemarkName", VL, 99);
// account // account
CONSTRUCT_TYPED_SFIELD(sfAccount, "Account", ACCOUNT, 1); CONSTRUCT_TYPED_SFIELD(sfAccount, "Account", ACCOUNT, 1);
@@ -344,6 +347,7 @@ CONSTRUCT_UNTYPED_SFIELD(sfHookExecution, "HookExecution", OBJECT,
CONSTRUCT_UNTYPED_SFIELD(sfHookDefinition, "HookDefinition", OBJECT, 22); CONSTRUCT_UNTYPED_SFIELD(sfHookDefinition, "HookDefinition", OBJECT, 22);
CONSTRUCT_UNTYPED_SFIELD(sfHookParameter, "HookParameter", OBJECT, 23); CONSTRUCT_UNTYPED_SFIELD(sfHookParameter, "HookParameter", OBJECT, 23);
CONSTRUCT_UNTYPED_SFIELD(sfHookGrant, "HookGrant", OBJECT, 24); CONSTRUCT_UNTYPED_SFIELD(sfHookGrant, "HookGrant", OBJECT, 24);
CONSTRUCT_UNTYPED_SFIELD(sfRemark, "Remark", OBJECT, 97);
CONSTRUCT_UNTYPED_SFIELD(sfGenesisMint, "GenesisMint", OBJECT, 96); CONSTRUCT_UNTYPED_SFIELD(sfGenesisMint, "GenesisMint", OBJECT, 96);
CONSTRUCT_UNTYPED_SFIELD(sfActiveValidator, "ActiveValidator", OBJECT, 95); CONSTRUCT_UNTYPED_SFIELD(sfActiveValidator, "ActiveValidator", OBJECT, 95);
CONSTRUCT_UNTYPED_SFIELD(sfImportVLKey, "ImportVLKey", OBJECT, 94); CONSTRUCT_UNTYPED_SFIELD(sfImportVLKey, "ImportVLKey", OBJECT, 94);
@@ -370,6 +374,7 @@ CONSTRUCT_UNTYPED_SFIELD(sfDisabledValidators, "DisabledValidators", ARRAY,
CONSTRUCT_UNTYPED_SFIELD(sfHookExecutions, "HookExecutions", ARRAY, 18); CONSTRUCT_UNTYPED_SFIELD(sfHookExecutions, "HookExecutions", ARRAY, 18);
CONSTRUCT_UNTYPED_SFIELD(sfHookParameters, "HookParameters", ARRAY, 19); CONSTRUCT_UNTYPED_SFIELD(sfHookParameters, "HookParameters", ARRAY, 19);
CONSTRUCT_UNTYPED_SFIELD(sfHookGrants, "HookGrants", ARRAY, 20); CONSTRUCT_UNTYPED_SFIELD(sfHookGrants, "HookGrants", ARRAY, 20);
CONSTRUCT_UNTYPED_SFIELD(sfRemarks, "Remarks", ARRAY, 97);
CONSTRUCT_UNTYPED_SFIELD(sfGenesisMints, "GenesisMints", ARRAY, 96); CONSTRUCT_UNTYPED_SFIELD(sfGenesisMints, "GenesisMints", ARRAY, 96);
CONSTRUCT_UNTYPED_SFIELD(sfActiveValidators, "ActiveValidators", ARRAY, 95); CONSTRUCT_UNTYPED_SFIELD(sfActiveValidators, "ActiveValidators", ARRAY, 95);
CONSTRUCT_UNTYPED_SFIELD(sfImportVLKeys, "ImportVLKeys", ARRAY, 94); CONSTRUCT_UNTYPED_SFIELD(sfImportVLKeys, "ImportVLKeys", ARRAY, 94);

View File

@@ -92,6 +92,8 @@ transResults()
MAKE_ERROR(tecREQUIRES_FLAG, "The transaction or part-thereof requires a flag that wasn't set."), MAKE_ERROR(tecREQUIRES_FLAG, "The transaction or part-thereof requires a flag that wasn't set."),
MAKE_ERROR(tecPRECISION_LOSS, "The amounts used by the transaction cannot interact."), MAKE_ERROR(tecPRECISION_LOSS, "The amounts used by the transaction cannot interact."),
MAKE_ERROR(tecINSUF_RESERVE_SELLER, "The seller of an object has insufficient reserves, and thus cannot complete the sale."), MAKE_ERROR(tecINSUF_RESERVE_SELLER, "The seller of an object has insufficient reserves, and thus cannot complete the sale."),
MAKE_ERROR(tecIMMUTABLE, "The remark is marked immutable on the object, and therefore cannot be updated."),
MAKE_ERROR(tecTOO_MANY_REMARKS, "The number of remarks on the object would exceed the limit of 32."),
MAKE_ERROR(tefALREADY, "The exact transaction was already in this ledger."), MAKE_ERROR(tefALREADY, "The exact transaction was already in this ledger."),
MAKE_ERROR(tefBAD_ADD_AUTH, "Not authorized to add account."), MAKE_ERROR(tefBAD_ADD_AUTH, "Not authorized to add account."),
MAKE_ERROR(tefBAD_AUTH, "Transaction's public key is not authorized."), MAKE_ERROR(tefBAD_AUTH, "Transaction's public key is not authorized."),

View File

@@ -419,6 +419,7 @@ TxFormats::TxFormats()
{sfAmount, soeOPTIONAL}, {sfAmount, soeOPTIONAL},
{sfDestination, soeOPTIONAL}, {sfDestination, soeOPTIONAL},
{sfTicketSequence, soeOPTIONAL}, {sfTicketSequence, soeOPTIONAL},
{sfRemarks, soeOPTIONAL},
}, },
commonFields); commonFields);
@@ -456,6 +457,14 @@ TxFormats::TxFormats()
{sfTicketSequence, soeOPTIONAL}, {sfTicketSequence, soeOPTIONAL},
}, },
commonFields); commonFields);
add(jss::SetRemarks,
ttREMARKS_SET,
{
{sfObjectID, soeREQUIRED},
{sfRemarks, soeREQUIRED},
},
commonFields);
} }
TxFormats const& TxFormats const&