Use macros to instantiate most SField instances:

There have been cases in the past where SFields have been defined
in such a way that they did not follow our conventions.  In
particular, the string representation of an SField should match
the in-code name of the SField.

This change leverages the preprocessor to encourage SFields to
be properly constructed.

The suffixes of SField types are changed to be the same as
the suffixes of corresponding SerializedTypeIDs.  This allows
The preprocessor to match types using simple name pasting.

Since the string representation of the SField is part of our
stable API, the name of sfPayChannel was changed to sfChannel.
This change allows sfChannel to follow our conventions while
making no changes to our external API.
This commit is contained in:
Scott Schurr
2020-11-06 09:30:35 -08:00
committed by Nik Bougalis
parent f239050054
commit 17abca1caa
11 changed files with 356 additions and 360 deletions

View File

@@ -337,7 +337,7 @@ DirectIPaymentStep::quality(ReadView const& sb, QualityDirection qDir) const
if (!sle)
return QUALITY_ONE;
auto const& field = [this, qDir]() -> SF_U32 const& {
auto const& field = [this, qDir]() -> SF_UINT32 const& {
if (qDir == QualityDirection::in)
{
// compute dst quality in

View File

@@ -326,7 +326,7 @@ PayChanFund::preflight(PreflightContext const& ctx)
TER
PayChanFund::doApply()
{
Keylet const k(ltPAYCHAN, ctx_.tx[sfPayChannel]);
Keylet const k(ltPAYCHAN, ctx_.tx[sfChannel]);
auto const slep = ctx_.view().peek(k);
if (!slep)
return tecNO_ENTRY;
@@ -441,7 +441,7 @@ PayChanClaim::preflight(PreflightContext const& ctx)
if (reqBalance > authAmt)
return temBAD_AMOUNT;
Keylet const k(ltPAYCHAN, ctx.tx[sfPayChannel]);
Keylet const k(ltPAYCHAN, ctx.tx[sfChannel]);
if (!publicKeyType(ctx.tx[sfPublicKey]))
return temMALFORMED;
@@ -458,7 +458,7 @@ PayChanClaim::preflight(PreflightContext const& ctx)
TER
PayChanClaim::doApply()
{
Keylet const k(ltPAYCHAN, ctx_.tx[sfPayChannel]);
Keylet const k(ltPAYCHAN, ctx_.tx[sfChannel]);
auto const slep = ctx_.view().peek(k);
if (!slep)
return tecNO_TARGET;

View File

@@ -314,17 +314,17 @@ operator~(TypedField<T> const& f)
//------------------------------------------------------------------------------
using SF_U8 = TypedField<STInteger<std::uint8_t>>;
using SF_U16 = TypedField<STInteger<std::uint16_t>>;
using SF_U32 = TypedField<STInteger<std::uint32_t>>;
using SF_U64 = TypedField<STInteger<std::uint64_t>>;
using SF_U128 = TypedField<STBitString<128>>;
using SF_U160 = TypedField<STBitString<160>>;
using SF_U256 = TypedField<STBitString<256>>;
using SF_Account = TypedField<STAccount>;
using SF_Amount = TypedField<STAmount>;
using SF_Blob = TypedField<STBlob>;
using SF_Vec256 = TypedField<STVector256>;
using SF_UINT8 = TypedField<STInteger<std::uint8_t>>;
using SF_UINT16 = TypedField<STInteger<std::uint16_t>>;
using SF_UINT32 = TypedField<STInteger<std::uint32_t>>;
using SF_UINT64 = TypedField<STInteger<std::uint64_t>>;
using SF_HASH128 = TypedField<STBitString<128>>;
using SF_HASH160 = TypedField<STBitString<160>>;
using SF_HASH256 = TypedField<STBitString<256>>;
using SF_ACCOUNT = TypedField<STAccount>;
using SF_AMOUNT = TypedField<STAmount>;
using SF_VL = TypedField<STBlob>;
using SF_VECTOR256 = TypedField<STVector256>;
//------------------------------------------------------------------------------
@@ -336,164 +336,164 @@ extern SField const sfValidation;
extern SField const sfMetadata;
// 8-bit integers
extern SF_U8 const sfCloseResolution;
extern SF_U8 const sfMethod;
extern SF_U8 const sfTransactionResult;
extern SF_U8 const sfTickSize;
extern SF_U8 const sfUNLModifyDisabling;
extern SF_UINT8 const sfCloseResolution;
extern SF_UINT8 const sfMethod;
extern SF_UINT8 const sfTransactionResult;
extern SF_UINT8 const sfTickSize;
extern SF_UINT8 const sfUNLModifyDisabling;
// 16-bit integers
extern SF_U16 const sfLedgerEntryType;
extern SF_U16 const sfTransactionType;
extern SF_U16 const sfSignerWeight;
extern SF_UINT16 const sfLedgerEntryType;
extern SF_UINT16 const sfTransactionType;
extern SF_UINT16 const sfSignerWeight;
// 16-bit integers (uncommon)
extern SF_U16 const sfVersion;
extern SF_UINT16 const sfVersion;
// 32-bit integers (common)
extern SF_U32 const sfFlags;
extern SF_U32 const sfSourceTag;
extern SF_U32 const sfSequence;
extern SF_U32 const sfPreviousTxnLgrSeq;
extern SF_U32 const sfLedgerSequence;
extern SF_U32 const sfCloseTime;
extern SF_U32 const sfParentCloseTime;
extern SF_U32 const sfSigningTime;
extern SF_U32 const sfExpiration;
extern SF_U32 const sfTransferRate;
extern SF_U32 const sfWalletSize;
extern SF_U32 const sfOwnerCount;
extern SF_U32 const sfDestinationTag;
extern SF_UINT32 const sfFlags;
extern SF_UINT32 const sfSourceTag;
extern SF_UINT32 const sfSequence;
extern SF_UINT32 const sfPreviousTxnLgrSeq;
extern SF_UINT32 const sfLedgerSequence;
extern SF_UINT32 const sfCloseTime;
extern SF_UINT32 const sfParentCloseTime;
extern SF_UINT32 const sfSigningTime;
extern SF_UINT32 const sfExpiration;
extern SF_UINT32 const sfTransferRate;
extern SF_UINT32 const sfWalletSize;
extern SF_UINT32 const sfOwnerCount;
extern SF_UINT32 const sfDestinationTag;
// 32-bit integers (uncommon)
extern SF_U32 const sfHighQualityIn;
extern SF_U32 const sfHighQualityOut;
extern SF_U32 const sfLowQualityIn;
extern SF_U32 const sfLowQualityOut;
extern SF_U32 const sfQualityIn;
extern SF_U32 const sfQualityOut;
extern SF_U32 const sfStampEscrow;
extern SF_U32 const sfBondAmount;
extern SF_U32 const sfLoadFee;
extern SF_U32 const sfOfferSequence;
extern SF_U32 const sfFirstLedgerSequence;
extern SF_U32 const sfLastLedgerSequence;
extern SF_U32 const sfTransactionIndex;
extern SF_U32 const sfOperationLimit;
extern SF_U32 const sfReferenceFeeUnits;
extern SF_U32 const sfReserveBase;
extern SF_U32 const sfReserveIncrement;
extern SF_U32 const sfSetFlag;
extern SF_U32 const sfClearFlag;
extern SF_U32 const sfSignerQuorum;
extern SF_U32 const sfCancelAfter;
extern SF_U32 const sfFinishAfter;
extern SF_U32 const sfSignerListID;
extern SF_U32 const sfSettleDelay;
extern SF_U32 const sfTicketCount;
extern SF_U32 const sfTicketSequence;
extern SF_UINT32 const sfHighQualityIn;
extern SF_UINT32 const sfHighQualityOut;
extern SF_UINT32 const sfLowQualityIn;
extern SF_UINT32 const sfLowQualityOut;
extern SF_UINT32 const sfQualityIn;
extern SF_UINT32 const sfQualityOut;
extern SF_UINT32 const sfStampEscrow;
extern SF_UINT32 const sfBondAmount;
extern SF_UINT32 const sfLoadFee;
extern SF_UINT32 const sfOfferSequence;
extern SF_UINT32 const sfFirstLedgerSequence;
extern SF_UINT32 const sfLastLedgerSequence;
extern SF_UINT32 const sfTransactionIndex;
extern SF_UINT32 const sfOperationLimit;
extern SF_UINT32 const sfReferenceFeeUnits;
extern SF_UINT32 const sfReserveBase;
extern SF_UINT32 const sfReserveIncrement;
extern SF_UINT32 const sfSetFlag;
extern SF_UINT32 const sfClearFlag;
extern SF_UINT32 const sfSignerQuorum;
extern SF_UINT32 const sfCancelAfter;
extern SF_UINT32 const sfFinishAfter;
extern SF_UINT32 const sfSignerListID;
extern SF_UINT32 const sfSettleDelay;
extern SF_UINT32 const sfTicketCount;
extern SF_UINT32 const sfTicketSequence;
// 64-bit integers
extern SF_U64 const sfIndexNext;
extern SF_U64 const sfIndexPrevious;
extern SF_U64 const sfBookNode;
extern SF_U64 const sfOwnerNode;
extern SF_U64 const sfBaseFee;
extern SF_U64 const sfExchangeRate;
extern SF_U64 const sfLowNode;
extern SF_U64 const sfHighNode;
extern SF_U64 const sfDestinationNode;
extern SF_U64 const sfCookie;
extern SF_U64 const sfServerVersion;
extern SF_UINT64 const sfIndexNext;
extern SF_UINT64 const sfIndexPrevious;
extern SF_UINT64 const sfBookNode;
extern SF_UINT64 const sfOwnerNode;
extern SF_UINT64 const sfBaseFee;
extern SF_UINT64 const sfExchangeRate;
extern SF_UINT64 const sfLowNode;
extern SF_UINT64 const sfHighNode;
extern SF_UINT64 const sfDestinationNode;
extern SF_UINT64 const sfCookie;
extern SF_UINT64 const sfServerVersion;
// 128-bit
extern SF_U128 const sfEmailHash;
extern SF_HASH128 const sfEmailHash;
// 160-bit (common)
extern SF_U160 const sfTakerPaysCurrency;
extern SF_U160 const sfTakerPaysIssuer;
extern SF_U160 const sfTakerGetsCurrency;
extern SF_U160 const sfTakerGetsIssuer;
extern SF_HASH160 const sfTakerPaysCurrency;
extern SF_HASH160 const sfTakerPaysIssuer;
extern SF_HASH160 const sfTakerGetsCurrency;
extern SF_HASH160 const sfTakerGetsIssuer;
// 256-bit (common)
extern SF_U256 const sfLedgerHash;
extern SF_U256 const sfParentHash;
extern SF_U256 const sfTransactionHash;
extern SF_U256 const sfAccountHash;
extern SF_U256 const sfPreviousTxnID;
extern SF_U256 const sfLedgerIndex;
extern SF_U256 const sfWalletLocator;
extern SF_U256 const sfRootIndex;
extern SF_U256 const sfAccountTxnID;
extern SF_HASH256 const sfLedgerHash;
extern SF_HASH256 const sfParentHash;
extern SF_HASH256 const sfTransactionHash;
extern SF_HASH256 const sfAccountHash;
extern SF_HASH256 const sfPreviousTxnID;
extern SF_HASH256 const sfLedgerIndex;
extern SF_HASH256 const sfWalletLocator;
extern SF_HASH256 const sfRootIndex;
extern SF_HASH256 const sfAccountTxnID;
// 256-bit (uncommon)
extern SF_U256 const sfBookDirectory;
extern SF_U256 const sfInvoiceID;
extern SF_U256 const sfNickname;
extern SF_U256 const sfAmendment;
extern SF_U256 const sfDigest;
extern SF_U256 const sfPayChannel;
extern SF_U256 const sfConsensusHash;
extern SF_U256 const sfCheckID;
extern SF_U256 const sfValidatedHash;
extern SF_HASH256 const sfBookDirectory;
extern SF_HASH256 const sfInvoiceID;
extern SF_HASH256 const sfNickname;
extern SF_HASH256 const sfAmendment;
extern SF_HASH256 const sfDigest;
extern SF_HASH256 const sfChannel;
extern SF_HASH256 const sfConsensusHash;
extern SF_HASH256 const sfCheckID;
extern SF_HASH256 const sfValidatedHash;
// currency amount (common)
extern SF_Amount const sfAmount;
extern SF_Amount const sfBalance;
extern SF_Amount const sfLimitAmount;
extern SF_Amount const sfTakerPays;
extern SF_Amount const sfTakerGets;
extern SF_Amount const sfLowLimit;
extern SF_Amount const sfHighLimit;
extern SF_Amount const sfFee;
extern SF_Amount const sfSendMax;
extern SF_Amount const sfDeliverMin;
extern SF_AMOUNT const sfAmount;
extern SF_AMOUNT const sfBalance;
extern SF_AMOUNT const sfLimitAmount;
extern SF_AMOUNT const sfTakerPays;
extern SF_AMOUNT const sfTakerGets;
extern SF_AMOUNT const sfLowLimit;
extern SF_AMOUNT const sfHighLimit;
extern SF_AMOUNT const sfFee;
extern SF_AMOUNT const sfSendMax;
extern SF_AMOUNT const sfDeliverMin;
// currency amount (uncommon)
extern SF_Amount const sfMinimumOffer;
extern SF_Amount const sfRippleEscrow;
extern SF_Amount const sfDeliveredAmount;
extern SF_AMOUNT const sfMinimumOffer;
extern SF_AMOUNT const sfRippleEscrow;
extern SF_AMOUNT const sfDeliveredAmount;
// variable length (common)
extern SF_Blob const sfPublicKey;
extern SF_Blob const sfMessageKey;
extern SF_Blob const sfSigningPubKey;
extern SF_Blob const sfTxnSignature;
extern SF_Blob const sfSignature;
extern SF_Blob const sfDomain;
extern SF_Blob const sfFundCode;
extern SF_Blob const sfRemoveCode;
extern SF_Blob const sfExpireCode;
extern SF_Blob const sfCreateCode;
extern SF_Blob const sfMemoType;
extern SF_Blob const sfMemoData;
extern SF_Blob const sfMemoFormat;
extern SF_VL const sfPublicKey;
extern SF_VL const sfMessageKey;
extern SF_VL const sfSigningPubKey;
extern SF_VL const sfTxnSignature;
extern SF_VL const sfSignature;
extern SF_VL const sfDomain;
extern SF_VL const sfFundCode;
extern SF_VL const sfRemoveCode;
extern SF_VL const sfExpireCode;
extern SF_VL const sfCreateCode;
extern SF_VL const sfMemoType;
extern SF_VL const sfMemoData;
extern SF_VL const sfMemoFormat;
// variable length (uncommon)
extern SF_Blob const sfFulfillment;
extern SF_Blob const sfCondition;
extern SF_Blob const sfMasterSignature;
extern SF_Blob const sfUNLModifyValidator;
extern SF_Blob const sfValidatorToDisable;
extern SF_Blob const sfValidatorToReEnable;
extern SF_VL const sfFulfillment;
extern SF_VL const sfCondition;
extern SF_VL const sfMasterSignature;
extern SF_VL const sfUNLModifyValidator;
extern SF_VL const sfValidatorToDisable;
extern SF_VL const sfValidatorToReEnable;
// account
extern SF_Account const sfAccount;
extern SF_Account const sfOwner;
extern SF_Account const sfDestination;
extern SF_Account const sfIssuer;
extern SF_Account const sfAuthorize;
extern SF_Account const sfUnauthorize;
extern SF_Account const sfTarget;
extern SF_Account const sfRegularKey;
extern SF_ACCOUNT const sfAccount;
extern SF_ACCOUNT const sfOwner;
extern SF_ACCOUNT const sfDestination;
extern SF_ACCOUNT const sfIssuer;
extern SF_ACCOUNT const sfAuthorize;
extern SF_ACCOUNT const sfUnauthorize;
extern SF_ACCOUNT const sfTarget;
extern SF_ACCOUNT const sfRegularKey;
// path set
extern SField const sfPaths;
// vector of 256-bit
extern SF_Vec256 const sfIndexes;
extern SF_Vec256 const sfHashes;
extern SF_Vec256 const sfAmendments;
extern SF_VECTOR256 const sfIndexes;
extern SF_VECTOR256 const sfHashes;
extern SF_VECTOR256 const sfAmendments;
// inner object
// OBJECT/1 is reserved for end of object

View File

@@ -45,7 +45,7 @@ sign(
HashPrefix const& prefix,
KeyType type,
SecretKey const& sk,
SF_Blob const& sigField = sfSignature);
SF_VL const& sigField = sfSignature);
/** Returns `true` if STObject contains valid signature
@@ -60,7 +60,7 @@ verify(
STObject const& st,
HashPrefix const& prefix,
PublicKey const& pk,
SF_Blob const& sigField = sfSignature);
SF_VL const& sigField = sfSignature);
/** Return a Serializer suitable for computing a multisigning TxnSignature. */
Serializer

View File

@@ -20,6 +20,7 @@
#include <ripple/protocol/SField.h>
#include <cassert>
#include <string>
#include <string_view>
#include <utility>
namespace ripple {
@@ -40,255 +41,250 @@ static SField::private_access_tag_t access;
// Construct all compile-time SFields, and register them in the knownCodeToField
// database:
// Use macros for most SField construction to enforce naming conventions.
#pragma push_macro("CONSTRUCT_UNTYPED_SFIELD")
#undef CONSTRUCT_UNTYPED_SFIELD
// It would be possible to design the macros so that sfName and txtName would
// be constructed from a single macro parameter. We chose not to take that
// path because then you cannot grep for the exact SField name and find
// where it is constructed. These macros allow that grep to succeed.
#define CONSTRUCT_UNTYPED_SFIELD(sfName, txtName, stiSuffix, fieldValue, ...) \
SField const sfName( \
access, STI_##stiSuffix, fieldValue, txtName, ##__VA_ARGS__); \
static_assert( \
std::string_view(#sfName) == "sf" txtName, \
"Declaration of SField does not match its text name")
#pragma push_macro("CONSTRUCT_TYPED_SFIELD")
#undef CONSTRUCT_TYPED_SFIELD
#define CONSTRUCT_TYPED_SFIELD(sfName, txtName, stiSuffix, fieldValue, ...) \
SF_##stiSuffix const sfName( \
access, STI_##stiSuffix, fieldValue, txtName, ##__VA_ARGS__); \
static_assert( \
std::string_view(#sfName) == "sf" txtName, \
"Declaration of SField does not match its text name")
// clang-format off
// SFields which, for historical reasons, do not follow naming conventions.
SField const sfInvalid(access, -1);
SField const sfGeneric(access, 0);
SField const sfLedgerEntry(access, STI_LEDGERENTRY, 257, "LedgerEntry");
SField const sfTransaction(access, STI_TRANSACTION, 257, "Transaction");
SField const sfValidation(access, STI_VALIDATION, 257, "Validation");
SField const sfMetadata(access, STI_METADATA, 257, "Metadata");
SField const sfHash(access, STI_HASH256, 257, "hash");
SField const sfIndex(access, STI_HASH256, 258, "index");
// Untyped SFields
CONSTRUCT_UNTYPED_SFIELD(sfLedgerEntry, "LedgerEntry", LEDGERENTRY, 257);
CONSTRUCT_UNTYPED_SFIELD(sfTransaction, "Transaction", TRANSACTION, 257);
CONSTRUCT_UNTYPED_SFIELD(sfValidation, "Validation", VALIDATION, 257);
CONSTRUCT_UNTYPED_SFIELD(sfMetadata, "Metadata", METADATA, 257);
// 8-bit integers
SF_U8 const sfCloseResolution(access, STI_UINT8, 1, "CloseResolution");
SF_U8 const sfMethod(access, STI_UINT8, 2, "Method");
SF_U8 const sfTransactionResult(access, STI_UINT8, 3, "TransactionResult");
CONSTRUCT_TYPED_SFIELD(sfCloseResolution, "CloseResolution", UINT8, 1);
CONSTRUCT_TYPED_SFIELD(sfMethod, "Method", UINT8, 2);
CONSTRUCT_TYPED_SFIELD(sfTransactionResult, "TransactionResult", UINT8, 3);
// 8-bit integers (uncommon)
SF_U8 const sfTickSize(access, STI_UINT8, 16, "TickSize");
SF_U8 const sfUNLModifyDisabling(access, STI_UINT8, 17, "UNLModifyDisabling");
CONSTRUCT_TYPED_SFIELD(sfTickSize, "TickSize", UINT8, 16);
CONSTRUCT_TYPED_SFIELD(sfUNLModifyDisabling, "UNLModifyDisabling", UINT8, 17);
// 16-bit integers
SF_U16 const sfLedgerEntryType(
access,
STI_UINT16,
1,
"LedgerEntryType",
SField::sMD_Never);
SF_U16 const sfTransactionType(access, STI_UINT16, 2, "TransactionType");
SF_U16 const sfSignerWeight(access, STI_UINT16, 3, "SignerWeight");
CONSTRUCT_TYPED_SFIELD(sfLedgerEntryType, "LedgerEntryType", UINT16, 1, SField::sMD_Never);
CONSTRUCT_TYPED_SFIELD(sfTransactionType, "TransactionType", UINT16, 2);
CONSTRUCT_TYPED_SFIELD(sfSignerWeight, "SignerWeight", UINT16, 3);
// 16-bit integers (uncommon)
SF_U16 const sfVersion(access, STI_UINT16, 16, "Version");
CONSTRUCT_TYPED_SFIELD(sfVersion, "Version", UINT16, 16);
// 32-bit integers (common)
SF_U32 const sfFlags(access, STI_UINT32, 2, "Flags");
SF_U32 const sfSourceTag(access, STI_UINT32, 3, "SourceTag");
SF_U32 const sfSequence(access, STI_UINT32, 4, "Sequence");
SF_U32 const sfPreviousTxnLgrSeq(
access,
STI_UINT32,
5,
"PreviousTxnLgrSeq",
SField::sMD_DeleteFinal);
SF_U32 const sfLedgerSequence(access, STI_UINT32, 6, "LedgerSequence");
SF_U32 const sfCloseTime(access, STI_UINT32, 7, "CloseTime");
SF_U32 const sfParentCloseTime(access, STI_UINT32, 8, "ParentCloseTime");
SF_U32 const sfSigningTime(access, STI_UINT32, 9, "SigningTime");
SF_U32 const sfExpiration(access, STI_UINT32, 10, "Expiration");
SF_U32 const sfTransferRate(access, STI_UINT32, 11, "TransferRate");
SF_U32 const sfWalletSize(access, STI_UINT32, 12, "WalletSize");
SF_U32 const sfOwnerCount(access, STI_UINT32, 13, "OwnerCount");
SF_U32 const sfDestinationTag(access, STI_UINT32, 14, "DestinationTag");
CONSTRUCT_TYPED_SFIELD(sfFlags, "Flags", UINT32, 2);
CONSTRUCT_TYPED_SFIELD(sfSourceTag, "SourceTag", UINT32, 3);
CONSTRUCT_TYPED_SFIELD(sfSequence, "Sequence", UINT32, 4);
CONSTRUCT_TYPED_SFIELD(sfPreviousTxnLgrSeq, "PreviousTxnLgrSeq", UINT32, 5, SField::sMD_DeleteFinal);
CONSTRUCT_TYPED_SFIELD(sfLedgerSequence, "LedgerSequence", UINT32, 6);
CONSTRUCT_TYPED_SFIELD(sfCloseTime, "CloseTime", UINT32, 7);
CONSTRUCT_TYPED_SFIELD(sfParentCloseTime, "ParentCloseTime", UINT32, 8);
CONSTRUCT_TYPED_SFIELD(sfSigningTime, "SigningTime", UINT32, 9);
CONSTRUCT_TYPED_SFIELD(sfExpiration, "Expiration", UINT32, 10);
CONSTRUCT_TYPED_SFIELD(sfTransferRate, "TransferRate", UINT32, 11);
CONSTRUCT_TYPED_SFIELD(sfWalletSize, "WalletSize", UINT32, 12);
CONSTRUCT_TYPED_SFIELD(sfOwnerCount, "OwnerCount", UINT32, 13);
CONSTRUCT_TYPED_SFIELD(sfDestinationTag, "DestinationTag", UINT32, 14);
// 32-bit integers (uncommon)
SF_U32 const sfHighQualityIn(access, STI_UINT32, 16, "HighQualityIn");
SF_U32 const sfHighQualityOut(access, STI_UINT32, 17, "HighQualityOut");
SF_U32 const sfLowQualityIn(access, STI_UINT32, 18, "LowQualityIn");
SF_U32 const sfLowQualityOut(access, STI_UINT32, 19, "LowQualityOut");
SF_U32 const sfQualityIn(access, STI_UINT32, 20, "QualityIn");
SF_U32 const sfQualityOut(access, STI_UINT32, 21, "QualityOut");
SF_U32 const sfStampEscrow(access, STI_UINT32, 22, "StampEscrow");
SF_U32 const sfBondAmount(access, STI_UINT32, 23, "BondAmount");
SF_U32 const sfLoadFee(access, STI_UINT32, 24, "LoadFee");
SF_U32 const sfOfferSequence(access, STI_UINT32, 25, "OfferSequence");
SF_U32 const
sfFirstLedgerSequence(access, STI_UINT32, 26, "FirstLedgerSequence");
SF_U32 const sfLastLedgerSequence(access, STI_UINT32, 27, "LastLedgerSequence");
SF_U32 const sfTransactionIndex(access, STI_UINT32, 28, "TransactionIndex");
SF_U32 const sfOperationLimit(access, STI_UINT32, 29, "OperationLimit");
SF_U32 const sfReferenceFeeUnits(access, STI_UINT32, 30, "ReferenceFeeUnits");
SF_U32 const sfReserveBase(access, STI_UINT32, 31, "ReserveBase");
SF_U32 const sfReserveIncrement(access, STI_UINT32, 32, "ReserveIncrement");
SF_U32 const sfSetFlag(access, STI_UINT32, 33, "SetFlag");
SF_U32 const sfClearFlag(access, STI_UINT32, 34, "ClearFlag");
SF_U32 const sfSignerQuorum(access, STI_UINT32, 35, "SignerQuorum");
SF_U32 const sfCancelAfter(access, STI_UINT32, 36, "CancelAfter");
SF_U32 const sfFinishAfter(access, STI_UINT32, 37, "FinishAfter");
SF_U32 const sfSignerListID(access, STI_UINT32, 38, "SignerListID");
SF_U32 const sfSettleDelay(access, STI_UINT32, 39, "SettleDelay");
SF_U32 const sfTicketCount(access, STI_UINT32, 40, "TicketCount");
SF_U32 const sfTicketSequence(access, STI_UINT32, 41, "TicketSequence");
CONSTRUCT_TYPED_SFIELD(sfHighQualityIn, "HighQualityIn", UINT32, 16);
CONSTRUCT_TYPED_SFIELD(sfHighQualityOut, "HighQualityOut", UINT32, 17);
CONSTRUCT_TYPED_SFIELD(sfLowQualityIn, "LowQualityIn", UINT32, 18);
CONSTRUCT_TYPED_SFIELD(sfLowQualityOut, "LowQualityOut", UINT32, 19);
CONSTRUCT_TYPED_SFIELD(sfQualityIn, "QualityIn", UINT32, 20);
CONSTRUCT_TYPED_SFIELD(sfQualityOut, "QualityOut", UINT32, 21);
CONSTRUCT_TYPED_SFIELD(sfStampEscrow, "StampEscrow", UINT32, 22);
CONSTRUCT_TYPED_SFIELD(sfBondAmount, "BondAmount", UINT32, 23);
CONSTRUCT_TYPED_SFIELD(sfLoadFee, "LoadFee", UINT32, 24);
CONSTRUCT_TYPED_SFIELD(sfOfferSequence, "OfferSequence", UINT32, 25);
CONSTRUCT_TYPED_SFIELD(sfFirstLedgerSequence, "FirstLedgerSequence", UINT32, 26);
CONSTRUCT_TYPED_SFIELD(sfLastLedgerSequence, "LastLedgerSequence", UINT32, 27);
CONSTRUCT_TYPED_SFIELD(sfTransactionIndex, "TransactionIndex", UINT32, 28);
CONSTRUCT_TYPED_SFIELD(sfOperationLimit, "OperationLimit", UINT32, 29);
CONSTRUCT_TYPED_SFIELD(sfReferenceFeeUnits, "ReferenceFeeUnits", UINT32, 30);
CONSTRUCT_TYPED_SFIELD(sfReserveBase, "ReserveBase", UINT32, 31);
CONSTRUCT_TYPED_SFIELD(sfReserveIncrement, "ReserveIncrement", UINT32, 32);
CONSTRUCT_TYPED_SFIELD(sfSetFlag, "SetFlag", UINT32, 33);
CONSTRUCT_TYPED_SFIELD(sfClearFlag, "ClearFlag", UINT32, 34);
CONSTRUCT_TYPED_SFIELD(sfSignerQuorum, "SignerQuorum", UINT32, 35);
CONSTRUCT_TYPED_SFIELD(sfCancelAfter, "CancelAfter", UINT32, 36);
CONSTRUCT_TYPED_SFIELD(sfFinishAfter, "FinishAfter", UINT32, 37);
CONSTRUCT_TYPED_SFIELD(sfSignerListID, "SignerListID", UINT32, 38);
CONSTRUCT_TYPED_SFIELD(sfSettleDelay, "SettleDelay", UINT32, 39);
CONSTRUCT_TYPED_SFIELD(sfTicketCount, "TicketCount", UINT32, 40);
CONSTRUCT_TYPED_SFIELD(sfTicketSequence, "TicketSequence", UINT32, 41);
// 64-bit integers
SF_U64 const sfIndexNext(access, STI_UINT64, 1, "IndexNext");
SF_U64 const sfIndexPrevious(access, STI_UINT64, 2, "IndexPrevious");
SF_U64 const sfBookNode(access, STI_UINT64, 3, "BookNode");
SF_U64 const sfOwnerNode(access, STI_UINT64, 4, "OwnerNode");
SF_U64 const sfBaseFee(access, STI_UINT64, 5, "BaseFee");
SF_U64 const sfExchangeRate(access, STI_UINT64, 6, "ExchangeRate");
SF_U64 const sfLowNode(access, STI_UINT64, 7, "LowNode");
SF_U64 const sfHighNode(access, STI_UINT64, 8, "HighNode");
SF_U64 const sfDestinationNode(access, STI_UINT64, 9, "DestinationNode");
SF_U64 const sfCookie(access, STI_UINT64, 10, "Cookie");
SF_U64 const sfServerVersion(access, STI_UINT64, 11, "ServerVersion");
CONSTRUCT_TYPED_SFIELD(sfIndexNext, "IndexNext", UINT64, 1);
CONSTRUCT_TYPED_SFIELD(sfIndexPrevious, "IndexPrevious", UINT64, 2);
CONSTRUCT_TYPED_SFIELD(sfBookNode, "BookNode", UINT64, 3);
CONSTRUCT_TYPED_SFIELD(sfOwnerNode, "OwnerNode", UINT64, 4);
CONSTRUCT_TYPED_SFIELD(sfBaseFee, "BaseFee", UINT64, 5);
CONSTRUCT_TYPED_SFIELD(sfExchangeRate, "ExchangeRate", UINT64, 6);
CONSTRUCT_TYPED_SFIELD(sfLowNode, "LowNode", UINT64, 7);
CONSTRUCT_TYPED_SFIELD(sfHighNode, "HighNode", UINT64, 8);
CONSTRUCT_TYPED_SFIELD(sfDestinationNode, "DestinationNode", UINT64, 9);
CONSTRUCT_TYPED_SFIELD(sfCookie, "Cookie", UINT64, 10);
CONSTRUCT_TYPED_SFIELD(sfServerVersion, "ServerVersion", UINT64, 11);
// 128-bit
SF_U128 const sfEmailHash(access, STI_HASH128, 1, "EmailHash");
CONSTRUCT_TYPED_SFIELD(sfEmailHash, "EmailHash", HASH128, 1);
// 160-bit (common)
SF_U160 const sfTakerPaysCurrency(access, STI_HASH160, 1, "TakerPaysCurrency");
SF_U160 const sfTakerPaysIssuer(access, STI_HASH160, 2, "TakerPaysIssuer");
SF_U160 const sfTakerGetsCurrency(access, STI_HASH160, 3, "TakerGetsCurrency");
SF_U160 const sfTakerGetsIssuer(access, STI_HASH160, 4, "TakerGetsIssuer");
CONSTRUCT_TYPED_SFIELD(sfTakerPaysCurrency, "TakerPaysCurrency", HASH160, 1);
CONSTRUCT_TYPED_SFIELD(sfTakerPaysIssuer, "TakerPaysIssuer", HASH160, 2);
CONSTRUCT_TYPED_SFIELD(sfTakerGetsCurrency, "TakerGetsCurrency", HASH160, 3);
CONSTRUCT_TYPED_SFIELD(sfTakerGetsIssuer, "TakerGetsIssuer", HASH160, 4);
// 256-bit (common)
SF_U256 const sfLedgerHash(access, STI_HASH256, 1, "LedgerHash");
SF_U256 const sfParentHash(access, STI_HASH256, 2, "ParentHash");
SF_U256 const sfTransactionHash(access, STI_HASH256, 3, "TransactionHash");
SF_U256 const sfAccountHash(access, STI_HASH256, 4, "AccountHash");
SF_U256 const sfPreviousTxnID(
access,
STI_HASH256,
5,
"PreviousTxnID",
SField::sMD_DeleteFinal);
SF_U256 const sfLedgerIndex(access, STI_HASH256, 6, "LedgerIndex");
SF_U256 const sfWalletLocator(access, STI_HASH256, 7, "WalletLocator");
SF_U256 const
sfRootIndex(access, STI_HASH256, 8, "RootIndex", SField::sMD_Always);
SF_U256 const sfAccountTxnID(access, STI_HASH256, 9, "AccountTxnID");
CONSTRUCT_TYPED_SFIELD(sfLedgerHash, "LedgerHash", HASH256, 1);
CONSTRUCT_TYPED_SFIELD(sfParentHash, "ParentHash", HASH256, 2);
CONSTRUCT_TYPED_SFIELD(sfTransactionHash, "TransactionHash", HASH256, 3);
CONSTRUCT_TYPED_SFIELD(sfAccountHash, "AccountHash", HASH256, 4);
CONSTRUCT_TYPED_SFIELD(sfPreviousTxnID, "PreviousTxnID", HASH256, 5, SField::sMD_DeleteFinal);
CONSTRUCT_TYPED_SFIELD(sfLedgerIndex, "LedgerIndex", HASH256, 6);
CONSTRUCT_TYPED_SFIELD(sfWalletLocator, "WalletLocator", HASH256, 7);
CONSTRUCT_TYPED_SFIELD(sfRootIndex, "RootIndex", HASH256, 8, SField::sMD_Always);
CONSTRUCT_TYPED_SFIELD(sfAccountTxnID, "AccountTxnID", HASH256, 9);
// 256-bit (uncommon)
SF_U256 const sfBookDirectory(access, STI_HASH256, 16, "BookDirectory");
SF_U256 const sfInvoiceID(access, STI_HASH256, 17, "InvoiceID");
SF_U256 const sfNickname(access, STI_HASH256, 18, "Nickname");
SF_U256 const sfAmendment(access, STI_HASH256, 19, "Amendment");
CONSTRUCT_TYPED_SFIELD(sfBookDirectory, "BookDirectory", HASH256, 16);
CONSTRUCT_TYPED_SFIELD(sfInvoiceID, "InvoiceID", HASH256, 17);
CONSTRUCT_TYPED_SFIELD(sfNickname, "Nickname", HASH256, 18);
CONSTRUCT_TYPED_SFIELD(sfAmendment, "Amendment", HASH256, 19);
// 20 is currently unused
SF_U256 const sfDigest(access, STI_HASH256, 21, "Digest");
SF_U256 const sfPayChannel(access, STI_HASH256, 22, "Channel");
SF_U256 const sfConsensusHash(access, STI_HASH256, 23, "ConsensusHash");
SF_U256 const sfCheckID(access, STI_HASH256, 24, "CheckID");
SF_U256 const sfValidatedHash(access, STI_HASH256, 25, "ValidatedHash");
CONSTRUCT_TYPED_SFIELD(sfDigest, "Digest", HASH256, 21);
CONSTRUCT_TYPED_SFIELD(sfChannel, "Channel", HASH256, 22);
CONSTRUCT_TYPED_SFIELD(sfConsensusHash, "ConsensusHash", HASH256, 23);
CONSTRUCT_TYPED_SFIELD(sfCheckID, "CheckID", HASH256, 24);
CONSTRUCT_TYPED_SFIELD(sfValidatedHash, "ValidatedHash", HASH256, 25);
// currency amount (common)
SF_Amount const sfAmount(access, STI_AMOUNT, 1, "Amount");
SF_Amount const sfBalance(access, STI_AMOUNT, 2, "Balance");
SF_Amount const sfLimitAmount(access, STI_AMOUNT, 3, "LimitAmount");
SF_Amount const sfTakerPays(access, STI_AMOUNT, 4, "TakerPays");
SF_Amount const sfTakerGets(access, STI_AMOUNT, 5, "TakerGets");
SF_Amount const sfLowLimit(access, STI_AMOUNT, 6, "LowLimit");
SF_Amount const sfHighLimit(access, STI_AMOUNT, 7, "HighLimit");
SF_Amount const sfFee(access, STI_AMOUNT, 8, "Fee");
SF_Amount const sfSendMax(access, STI_AMOUNT, 9, "SendMax");
SF_Amount const sfDeliverMin(access, STI_AMOUNT, 10, "DeliverMin");
CONSTRUCT_TYPED_SFIELD(sfAmount, "Amount", AMOUNT, 1);
CONSTRUCT_TYPED_SFIELD(sfBalance, "Balance", AMOUNT, 2);
CONSTRUCT_TYPED_SFIELD(sfLimitAmount, "LimitAmount", AMOUNT, 3);
CONSTRUCT_TYPED_SFIELD(sfTakerPays, "TakerPays", AMOUNT, 4);
CONSTRUCT_TYPED_SFIELD(sfTakerGets, "TakerGets", AMOUNT, 5);
CONSTRUCT_TYPED_SFIELD(sfLowLimit, "LowLimit", AMOUNT, 6);
CONSTRUCT_TYPED_SFIELD(sfHighLimit, "HighLimit", AMOUNT, 7);
CONSTRUCT_TYPED_SFIELD(sfFee, "Fee", AMOUNT, 8);
CONSTRUCT_TYPED_SFIELD(sfSendMax, "SendMax", AMOUNT, 9);
CONSTRUCT_TYPED_SFIELD(sfDeliverMin, "DeliverMin", AMOUNT, 10);
// currency amount (uncommon)
SF_Amount const sfMinimumOffer(access, STI_AMOUNT, 16, "MinimumOffer");
SF_Amount const sfRippleEscrow(access, STI_AMOUNT, 17, "RippleEscrow");
SF_Amount const sfDeliveredAmount(access, STI_AMOUNT, 18, "DeliveredAmount");
CONSTRUCT_TYPED_SFIELD(sfMinimumOffer, "MinimumOffer", AMOUNT, 16);
CONSTRUCT_TYPED_SFIELD(sfRippleEscrow, "RippleEscrow", AMOUNT, 17);
CONSTRUCT_TYPED_SFIELD(sfDeliveredAmount, "DeliveredAmount", AMOUNT, 18);
// variable length (common)
SF_Blob const sfPublicKey(access, STI_VL, 1, "PublicKey");
SF_Blob const sfMessageKey(access, STI_VL, 2, "MessageKey");
SF_Blob const sfSigningPubKey(access, STI_VL, 3, "SigningPubKey");
SF_Blob const sfTxnSignature(
access,
STI_VL,
4,
"TxnSignature",
SField::sMD_Default,
SField::notSigning);
SF_Blob const sfSignature(
access,
STI_VL,
6,
"Signature",
SField::sMD_Default,
SField::notSigning);
SF_Blob const sfDomain(access, STI_VL, 7, "Domain");
SF_Blob const sfFundCode(access, STI_VL, 8, "FundCode");
SF_Blob const sfRemoveCode(access, STI_VL, 9, "RemoveCode");
SF_Blob const sfExpireCode(access, STI_VL, 10, "ExpireCode");
SF_Blob const sfCreateCode(access, STI_VL, 11, "CreateCode");
SF_Blob const sfMemoType(access, STI_VL, 12, "MemoType");
SF_Blob const sfMemoData(access, STI_VL, 13, "MemoData");
SF_Blob const sfMemoFormat(access, STI_VL, 14, "MemoFormat");
CONSTRUCT_TYPED_SFIELD(sfPublicKey, "PublicKey", VL, 1);
CONSTRUCT_TYPED_SFIELD(sfMessageKey, "MessageKey", VL, 2);
CONSTRUCT_TYPED_SFIELD(sfSigningPubKey, "SigningPubKey", VL, 3);
CONSTRUCT_TYPED_SFIELD(sfTxnSignature, "TxnSignature", VL, 4, SField::sMD_Default, SField::notSigning);
// Was 5 used and then obsoleted?
CONSTRUCT_TYPED_SFIELD(sfSignature, "Signature", VL, 6, SField::sMD_Default, SField::notSigning);
CONSTRUCT_TYPED_SFIELD(sfDomain, "Domain", VL, 7);
CONSTRUCT_TYPED_SFIELD(sfFundCode, "FundCode", VL, 8);
CONSTRUCT_TYPED_SFIELD(sfRemoveCode, "RemoveCode", VL, 9);
CONSTRUCT_TYPED_SFIELD(sfExpireCode, "ExpireCode", VL, 10);
CONSTRUCT_TYPED_SFIELD(sfCreateCode, "CreateCode", VL, 11);
CONSTRUCT_TYPED_SFIELD(sfMemoType, "MemoType", VL, 12);
CONSTRUCT_TYPED_SFIELD(sfMemoData, "MemoData", VL, 13);
CONSTRUCT_TYPED_SFIELD(sfMemoFormat, "MemoFormat", VL, 14);
// variable length (uncommon)
SF_Blob const sfFulfillment(access, STI_VL, 16, "Fulfillment");
SF_Blob const sfCondition(access, STI_VL, 17, "Condition");
SF_Blob const sfMasterSignature(
access,
STI_VL,
18,
"MasterSignature",
SField::sMD_Default,
SField::notSigning);
SF_Blob const sfUNLModifyValidator(access, STI_VL, 19, "UNLModifyValidator");
SF_Blob const sfValidatorToDisable(access, STI_VL, 20, "ValidatorToDisable");
SF_Blob const sfValidatorToReEnable(access, STI_VL, 21, "ValidatorToReEnable");
CONSTRUCT_TYPED_SFIELD(sfFulfillment, "Fulfillment", VL, 16);
CONSTRUCT_TYPED_SFIELD(sfCondition, "Condition", VL, 17);
CONSTRUCT_TYPED_SFIELD(sfMasterSignature, "MasterSignature", VL, 18, SField::sMD_Default, SField::notSigning);
CONSTRUCT_TYPED_SFIELD(sfUNLModifyValidator, "UNLModifyValidator", VL, 19);
CONSTRUCT_TYPED_SFIELD(sfValidatorToDisable, "ValidatorToDisable", VL, 20);
CONSTRUCT_TYPED_SFIELD(sfValidatorToReEnable, "ValidatorToReEnable", VL, 21);
// account
SF_Account const sfAccount(access, STI_ACCOUNT, 1, "Account");
SF_Account const sfOwner(access, STI_ACCOUNT, 2, "Owner");
SF_Account const sfDestination(access, STI_ACCOUNT, 3, "Destination");
SF_Account const sfIssuer(access, STI_ACCOUNT, 4, "Issuer");
SF_Account const sfAuthorize(access, STI_ACCOUNT, 5, "Authorize");
SF_Account const sfUnauthorize(access, STI_ACCOUNT, 6, "Unauthorize");
CONSTRUCT_TYPED_SFIELD(sfAccount, "Account", ACCOUNT, 1);
CONSTRUCT_TYPED_SFIELD(sfOwner, "Owner", ACCOUNT, 2);
CONSTRUCT_TYPED_SFIELD(sfDestination, "Destination", ACCOUNT, 3);
CONSTRUCT_TYPED_SFIELD(sfIssuer, "Issuer", ACCOUNT, 4);
CONSTRUCT_TYPED_SFIELD(sfAuthorize, "Authorize", ACCOUNT, 5);
CONSTRUCT_TYPED_SFIELD(sfUnauthorize, "Unauthorize", ACCOUNT, 6);
// 7 is currently unused
SF_Account const sfRegularKey(access, STI_ACCOUNT, 8, "RegularKey");
// path set
SField const sfPaths(access, STI_PATHSET, 1, "Paths");
CONSTRUCT_TYPED_SFIELD(sfRegularKey, "RegularKey", ACCOUNT, 8);
// vector of 256-bit
SF_Vec256 const
sfIndexes(access, STI_VECTOR256, 1, "Indexes", SField::sMD_Never);
SF_Vec256 const sfHashes(access, STI_VECTOR256, 2, "Hashes");
SF_Vec256 const sfAmendments(access, STI_VECTOR256, 3, "Amendments");
CONSTRUCT_TYPED_SFIELD(sfIndexes, "Indexes", VECTOR256, 1, SField::sMD_Never);
CONSTRUCT_TYPED_SFIELD(sfHashes, "Hashes", VECTOR256, 2);
CONSTRUCT_TYPED_SFIELD(sfAmendments, "Amendments", VECTOR256, 3);
// path set
CONSTRUCT_UNTYPED_SFIELD(sfPaths, "Paths", PATHSET, 1);
// inner object
// OBJECT/1 is reserved for end of object
SField const
sfTransactionMetaData(access, STI_OBJECT, 2, "TransactionMetaData");
SField const sfCreatedNode(access, STI_OBJECT, 3, "CreatedNode");
SField const sfDeletedNode(access, STI_OBJECT, 4, "DeletedNode");
SField const sfModifiedNode(access, STI_OBJECT, 5, "ModifiedNode");
SField const sfPreviousFields(access, STI_OBJECT, 6, "PreviousFields");
SField const sfFinalFields(access, STI_OBJECT, 7, "FinalFields");
SField const sfNewFields(access, STI_OBJECT, 8, "NewFields");
SField const sfTemplateEntry(access, STI_OBJECT, 9, "TemplateEntry");
SField const sfMemo(access, STI_OBJECT, 10, "Memo");
SField const sfSignerEntry(access, STI_OBJECT, 11, "SignerEntry");
CONSTRUCT_UNTYPED_SFIELD(sfTransactionMetaData, "TransactionMetaData", OBJECT, 2);
CONSTRUCT_UNTYPED_SFIELD(sfCreatedNode, "CreatedNode", OBJECT, 3);
CONSTRUCT_UNTYPED_SFIELD(sfDeletedNode, "DeletedNode", OBJECT, 4);
CONSTRUCT_UNTYPED_SFIELD(sfModifiedNode, "ModifiedNode", OBJECT, 5);
CONSTRUCT_UNTYPED_SFIELD(sfPreviousFields, "PreviousFields", OBJECT, 6);
CONSTRUCT_UNTYPED_SFIELD(sfFinalFields, "FinalFields", OBJECT, 7);
CONSTRUCT_UNTYPED_SFIELD(sfNewFields, "NewFields", OBJECT, 8);
CONSTRUCT_UNTYPED_SFIELD(sfTemplateEntry, "TemplateEntry", OBJECT, 9);
CONSTRUCT_UNTYPED_SFIELD(sfMemo, "Memo", OBJECT, 10);
CONSTRUCT_UNTYPED_SFIELD(sfSignerEntry, "SignerEntry", OBJECT, 11);
// inner object (uncommon)
SField const sfSigner(access, STI_OBJECT, 16, "Signer");
// 17 has not been used yet...
SField const sfMajority(access, STI_OBJECT, 18, "Majority");
SField const sfDisabledValidator(access, STI_OBJECT, 19, "DisabledValidator");
CONSTRUCT_UNTYPED_SFIELD(sfSigner, "Signer", OBJECT, 16);
// 17 has not been used yet
CONSTRUCT_UNTYPED_SFIELD(sfMajority, "Majority", OBJECT, 18);
CONSTRUCT_UNTYPED_SFIELD(sfDisabledValidator, "DisabledValidator", OBJECT, 19);
// array of objects
// ARRAY/1 is reserved for end of array
// SField const sfSigningAccounts (access, STI_ARRAY, 2, "SigningAccounts"); //
// Never been used.
SField const sfSigners(
access,
STI_ARRAY,
3,
"Signers",
SField::sMD_Default,
SField::notSigning);
SField const sfSignerEntries(access, STI_ARRAY, 4, "SignerEntries");
SField const sfTemplate(access, STI_ARRAY, 5, "Template");
SField const sfNecessary(access, STI_ARRAY, 6, "Necessary");
SField const sfSufficient(access, STI_ARRAY, 7, "Sufficient");
SField const sfAffectedNodes(access, STI_ARRAY, 8, "AffectedNodes");
SField const sfMemos(access, STI_ARRAY, 9, "Memos");
// 2 has never been used
CONSTRUCT_UNTYPED_SFIELD(sfSigners, "Signers", ARRAY, 3, SField::sMD_Default, SField::notSigning);
CONSTRUCT_UNTYPED_SFIELD(sfSignerEntries, "SignerEntries", ARRAY, 4);
CONSTRUCT_UNTYPED_SFIELD(sfTemplate, "Template", ARRAY, 5);
CONSTRUCT_UNTYPED_SFIELD(sfNecessary, "Necessary", ARRAY, 6);
CONSTRUCT_UNTYPED_SFIELD(sfSufficient, "Sufficient", ARRAY, 7);
CONSTRUCT_UNTYPED_SFIELD(sfAffectedNodes, "AffectedNodes", ARRAY, 8);
CONSTRUCT_UNTYPED_SFIELD(sfMemos, "Memos", ARRAY, 9);
// array of objects (uncommon)
SField const sfMajorities(access, STI_ARRAY, 16, "Majorities");
SField const sfDisabledValidators(access, STI_ARRAY, 17, "DisabledValidators");
CONSTRUCT_UNTYPED_SFIELD(sfMajorities, "Majorities", ARRAY, 16);
CONSTRUCT_UNTYPED_SFIELD(sfDisabledValidators, "DisabledValidators", ARRAY, 17);
// clang-format on
#undef CONSTRUCT_TYPED_SFIELD
#undef CONSTRUCT_UNTYPED_SFIELD
#pragma pop_macro("CONSTRUCT_TYPED_SFIELD")
#pragma pop_macro("CONSTRUCT_UNTYPED_SFIELD")
SField::SField(
private_access_tag_t,

View File

@@ -27,7 +27,7 @@ sign(
HashPrefix const& prefix,
KeyType type,
SecretKey const& sk,
SF_Blob const& sigField)
SF_VL const& sigField)
{
Serializer ss;
ss.add32(prefix);
@@ -40,7 +40,7 @@ verify(
STObject const& st,
HashPrefix const& prefix,
PublicKey const& pk,
SF_Blob const& sigField)
SF_VL const& sigField)
{
auto const sig = get(st, sigField);
if (!sig)

View File

@@ -205,7 +205,7 @@ TxFormats::TxFormats()
add(jss::PaymentChannelFund,
ttPAYCHAN_FUND,
{
{sfPayChannel, soeREQUIRED},
{sfChannel, soeREQUIRED},
{sfAmount, soeREQUIRED},
{sfExpiration, soeOPTIONAL},
{sfTicketSequence, soeOPTIONAL},
@@ -215,7 +215,7 @@ TxFormats::TxFormats()
add(jss::PaymentChannelClaim,
ttPAYCHAN_CLAIM,
{
{sfPayChannel, soeREQUIRED},
{sfChannel, soeREQUIRED},
{sfAmount, soeOPTIONAL},
{sfBalance, soeOPTIONAL},
{sfSignature, soeOPTIONAL},

View File

@@ -56,7 +56,7 @@ void
populateProtoVLasString(
T const& getProto,
STObject const& from,
SF_Blob const& field)
SF_VL const& field)
{
if (from.isFieldPresent(field))
{
@@ -71,7 +71,7 @@ void
populateProtoVec256(
T const& getProto,
STObject const& from,
SF_Vec256 const& field)
SF_VECTOR256 const& field)
{
if (from.isFieldPresent(field))
{
@@ -89,7 +89,7 @@ void
populateProtoAccount(
T const& getProto,
STObject const& from,
SF_Account const& field)
SF_ACCOUNT const& field)
{
if (from.isFieldPresent(field))
{
@@ -103,7 +103,7 @@ void
populateProtoAmount(
T const& getProto,
STObject const& from,
SF_Amount const& field)
SF_AMOUNT const& field)
{
if (from.isFieldPresent(field))
{
@@ -117,7 +117,7 @@ void
populateProtoCurrency(
T const& getProto,
STObject const& from,
SF_U160 const& field)
SF_HASH160 const& field)
{
if (from.isFieldPresent(field))
{
@@ -364,7 +364,7 @@ void
populateChannel(T& to, STObject const& from)
{
populateProtoPrimitive(
[&to]() { return to.mutable_channel(); }, from, sfPayChannel);
[&to]() { return to.mutable_channel(); }, from, sfChannel);
}
template <class T>

View File

@@ -411,7 +411,7 @@ public:
jv[jss::TransactionType] = jss::PaymentChannelClaim;
jv[jss::Flags] = tfClose;
jv[jss::Account] = account.human();
jv[sfPayChannel.jsonName] = to_string(payChanKeylet.key);
jv[sfChannel.jsonName] = to_string(payChanKeylet.key);
jv[sfPublicKey.jsonName] = strHex(pk.slice());
return jv;
};
@@ -512,7 +512,7 @@ public:
jv[jss::TransactionType] = jss::PaymentChannelClaim;
jv[jss::Flags] = tfUniversal;
jv[jss::Account] = alice.human();
jv[sfPayChannel.jsonName] = to_string(payChanKey.key);
jv[sfChannel.jsonName] = to_string(payChanKey.key);
jv[sfBalance.jsonName] =
payChanXRP.value().getJson(JsonOptions::none);
return jv;

View File

@@ -686,7 +686,7 @@ class AccountTxPaging_test : public beast::unit_test::suite
payChanFund[jss::TransactionType] = jss::PaymentChannelFund;
payChanFund[jss::Flags] = tfUniversal;
payChanFund[jss::Account] = alice.human();
payChanFund[sfPayChannel.jsonName] = payChanIndex;
payChanFund[sfChannel.jsonName] = payChanIndex;
payChanFund[jss::Amount] =
XRP(200).value().getJson(JsonOptions::none);
env(payChanFund, sig(alie));
@@ -699,7 +699,7 @@ class AccountTxPaging_test : public beast::unit_test::suite
payChanClaim[jss::TransactionType] = jss::PaymentChannelClaim;
payChanClaim[jss::Flags] = tfClose;
payChanClaim[jss::Account] = gw.human();
payChanClaim[sfPayChannel.jsonName] = payChanIndex;
payChanClaim[sfChannel.jsonName] = payChanIndex;
payChanClaim[sfPublicKey.jsonName] = strHex(alice.pk().slice());
env(payChanClaim);
env.close();

View File

@@ -368,7 +368,7 @@ class AccountTx_test : public beast::unit_test::suite
payChanFund[jss::TransactionType] = jss::PaymentChannelFund;
payChanFund[jss::Flags] = tfUniversal;
payChanFund[jss::Account] = alice.human();
payChanFund[sfPayChannel.jsonName] = payChanIndex;
payChanFund[sfChannel.jsonName] = payChanIndex;
payChanFund[jss::Amount] =
XRP(200).value().getJson(JsonOptions::none);
env(payChanFund, sig(alie));
@@ -379,7 +379,7 @@ class AccountTx_test : public beast::unit_test::suite
payChanClaim[jss::TransactionType] = jss::PaymentChannelClaim;
payChanClaim[jss::Flags] = tfClose;
payChanClaim[jss::Account] = gw.human();
payChanClaim[sfPayChannel.jsonName] = payChanIndex;
payChanClaim[sfChannel.jsonName] = payChanIndex;
payChanClaim[sfPublicKey.jsonName] = strHex(alice.pk().slice());
env(payChanClaim);
env.close();