mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-21 03:26:01 +00:00
Switch sfAssetTotal sfAssetAvailable and sfLossUnrealized to required
This commit is contained in:
@@ -475,10 +475,10 @@ LEDGER_ENTRY(ltVAULT, 0x0083, Vault, vault, ({
|
|||||||
{sfAccount, soeREQUIRED},
|
{sfAccount, soeREQUIRED},
|
||||||
{sfData, soeOPTIONAL},
|
{sfData, soeOPTIONAL},
|
||||||
{sfAsset, soeREQUIRED},
|
{sfAsset, soeREQUIRED},
|
||||||
{sfAssetTotal, soeDEFAULT},
|
{sfAssetTotal, soeREQUIRED},
|
||||||
{sfAssetAvailable, soeDEFAULT},
|
{sfAssetAvailable, soeREQUIRED},
|
||||||
{sfAssetMaximum, soeDEFAULT},
|
{sfAssetMaximum, soeDEFAULT},
|
||||||
{sfLossUnrealized, soeDEFAULT},
|
{sfLossUnrealized, soeREQUIRED},
|
||||||
{sfMPTokenIssuanceID, soeREQUIRED}, // sfShare
|
{sfMPTokenIssuanceID, soeREQUIRED}, // sfShare
|
||||||
{sfWithdrawalPolicy, soeREQUIRED},
|
{sfWithdrawalPolicy, soeREQUIRED},
|
||||||
// no ShareTotal ever (use MPTIssuance.sfOutstandingAmount)
|
// no ShareTotal ever (use MPTIssuance.sfOutstandingAmount)
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include <xrpl/json/json_forwards.h>
|
#include <xrpl/json/json_forwards.h>
|
||||||
#include <xrpl/protocol/Asset.h>
|
#include <xrpl/protocol/Asset.h>
|
||||||
#include <xrpl/protocol/Feature.h>
|
#include <xrpl/protocol/Feature.h>
|
||||||
|
#include <xrpl/protocol/Indexes.h>
|
||||||
#include <xrpl/protocol/STAmount.h>
|
#include <xrpl/protocol/STAmount.h>
|
||||||
#include <xrpl/protocol/STNumber.h>
|
#include <xrpl/protocol/STNumber.h>
|
||||||
#include <xrpl/protocol/TER.h>
|
#include <xrpl/protocol/TER.h>
|
||||||
@@ -780,7 +781,7 @@ class Vault_test : public beast::unit_test::suite
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
testTransactionFees()
|
testWithIOU()
|
||||||
{
|
{
|
||||||
testcase("IOU fees");
|
testcase("IOU fees");
|
||||||
Env env{*this};
|
Env env{*this};
|
||||||
@@ -802,16 +803,41 @@ class Vault_test : public beast::unit_test::suite
|
|||||||
env(tx);
|
env(tx);
|
||||||
env.close();
|
env.close();
|
||||||
|
|
||||||
AccountID const vaultAccount = [&env, key = keylet.key]() {
|
auto const [vaultAccount, ownerAccount, mptID] = //
|
||||||
|
[&env, &owner, key = keylet.key, this]() //
|
||||||
|
-> std::tuple<AccountID, AccountID, uint192> {
|
||||||
Json::Value jvParams;
|
Json::Value jvParams;
|
||||||
jvParams[jss::ledger_index] = jss::validated;
|
jvParams[jss::ledger_index] = jss::validated;
|
||||||
jvParams[jss::vault] = strHex(key);
|
jvParams[jss::vault] = strHex(key);
|
||||||
auto const jvVault =
|
auto jvVault = env.rpc("json", "ledger_entry", to_string(jvParams));
|
||||||
env.rpc("json", "ledger_entry", to_string(jvParams));
|
|
||||||
return parseBase58<AccountID>(
|
// Vault pseudo-account
|
||||||
jvVault[jss::result][jss::node][jss::Account].asString())
|
auto const vAcct =
|
||||||
.value();
|
parseBase58<AccountID>(
|
||||||
|
jvVault[jss::result][jss::node][jss::Account].asString())
|
||||||
|
.value();
|
||||||
|
|
||||||
|
// Owner account
|
||||||
|
auto const oAcct =
|
||||||
|
parseBase58<AccountID>(
|
||||||
|
jvVault[jss::result][jss::node][jss::Owner].asString())
|
||||||
|
.value();
|
||||||
|
BEAST_EXPECT(oAcct == owner.id());
|
||||||
|
|
||||||
|
// MPTID of the vault shares
|
||||||
|
auto const strMpt = jvVault[jss::result][jss::node][jss::Share]
|
||||||
|
[jss::mpt_issuance_id]
|
||||||
|
.asString();
|
||||||
|
uint192 mpt;
|
||||||
|
BEAST_EXPECT(mpt.parseHex(strMpt));
|
||||||
|
|
||||||
|
return {vAcct, oAcct, mpt};
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
BEAST_EXPECT(makeMptID(1, vaultAccount) == mptID);
|
||||||
|
BEAST_EXPECT(
|
||||||
|
keylet::vault(ownerAccount, env.seq(owner) - 1).key == keylet.key);
|
||||||
|
|
||||||
auto const vaultBalance = [&]() -> PrettyAmount {
|
auto const vaultBalance = [&]() -> PrettyAmount {
|
||||||
auto const sle = env.le(keylet::line(vaultAccount, issue));
|
auto const sle = env.le(keylet::line(vaultAccount, issue));
|
||||||
BEAST_EXPECT(sle != nullptr);
|
BEAST_EXPECT(sle != nullptr);
|
||||||
@@ -866,8 +892,8 @@ public:
|
|||||||
testCreateFailIOU();
|
testCreateFailIOU();
|
||||||
testCreateFailMPT();
|
testCreateFailMPT();
|
||||||
testWithMPT();
|
testWithMPT();
|
||||||
|
testWithIOU();
|
||||||
testWithDomainCheck();
|
testWithDomainCheck();
|
||||||
testTransactionFees();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -187,6 +187,9 @@ VaultCreate::doApply()
|
|||||||
vault->at(sfOwner) = ownerId;
|
vault->at(sfOwner) = ownerId;
|
||||||
vault->at(sfAccount) = pseudoId;
|
vault->at(sfAccount) = pseudoId;
|
||||||
vault->at(sfAsset) = tx[sfAsset];
|
vault->at(sfAsset) = tx[sfAsset];
|
||||||
|
vault->at(sfAssetTotal) = Number(0);
|
||||||
|
vault->at(sfAssetAvailable) = Number(0);
|
||||||
|
vault->at(sfLossUnrealized) = Number(0);
|
||||||
// Leave default values for AssetTotal and AssetAvailable, both zero.
|
// Leave default values for AssetTotal and AssetAvailable, both zero.
|
||||||
if (auto value = tx[~sfAssetMaximum])
|
if (auto value = tx[~sfAssetMaximum])
|
||||||
vault->at(sfAssetMaximum) = *value;
|
vault->at(sfAssetMaximum) = *value;
|
||||||
|
|||||||
Reference in New Issue
Block a user