mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 11:55:51 +00:00 
			
		
		
		
	fix: add trustline locking flag to account_info (#2338)
fixes #2323 --------- Co-authored-by: Ayaz Salikhov <mathbunnyru@users.noreply.github.com>
This commit is contained in:
		@@ -88,6 +88,7 @@ AccountInfoHandler::process(AccountInfoHandler::Input const& input, Context cons
 | 
			
		||||
 | 
			
		||||
    auto const isDisallowIncomingEnabled = isEnabled(Amendments::DisallowIncoming);
 | 
			
		||||
    auto const isClawbackEnabled = isEnabled(Amendments::Clawback);
 | 
			
		||||
    auto const isTokenEscrowEnabled = isEnabled(Amendments::TokenEscrow);
 | 
			
		||||
 | 
			
		||||
    // Return SignerList(s) if that is requested.
 | 
			
		||||
    if (input.signerLists) {
 | 
			
		||||
@@ -117,13 +118,20 @@ AccountInfoHandler::process(AccountInfoHandler::Input const& input, Context cons
 | 
			
		||||
            sle,
 | 
			
		||||
            isDisallowIncomingEnabled,
 | 
			
		||||
            isClawbackEnabled,
 | 
			
		||||
            isTokenEscrowEnabled,
 | 
			
		||||
            ctx.apiVersion,
 | 
			
		||||
            signerList
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Output(
 | 
			
		||||
        lgrInfo.seq, ripple::strHex(lgrInfo.hash), sle, isDisallowIncomingEnabled, isClawbackEnabled, ctx.apiVersion
 | 
			
		||||
        lgrInfo.seq,
 | 
			
		||||
        ripple::strHex(lgrInfo.hash),
 | 
			
		||||
        sle,
 | 
			
		||||
        isDisallowIncomingEnabled,
 | 
			
		||||
        isClawbackEnabled,
 | 
			
		||||
        isTokenEscrowEnabled,
 | 
			
		||||
        ctx.apiVersion
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -159,9 +167,11 @@ tag_invoke(boost::json::value_from_tag, boost::json::value& jv, AccountInfoHandl
 | 
			
		||||
        lsFlags.insert(lsFlags.end(), disallowIncomingFlags.begin(), disallowIncomingFlags.end());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (output.isClawbackEnabled) {
 | 
			
		||||
    if (output.isClawbackEnabled)
 | 
			
		||||
        lsFlags.emplace_back("allowTrustLineClawback", ripple::lsfAllowTrustLineClawback);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (output.isTokenEscrowEnabled)
 | 
			
		||||
        lsFlags.emplace_back("allowTrustLineLocking", ripple::lsfAllowTrustLineLocking);
 | 
			
		||||
 | 
			
		||||
    boost::json::object acctFlags;
 | 
			
		||||
    for (auto const& lsf : lsFlags)
 | 
			
		||||
 
 | 
			
		||||
@@ -61,6 +61,7 @@ public:
 | 
			
		||||
        ripple::STLedgerEntry accountData;
 | 
			
		||||
        bool isDisallowIncomingEnabled = false;
 | 
			
		||||
        bool isClawbackEnabled = false;
 | 
			
		||||
        bool isTokenEscrowEnabled = false;
 | 
			
		||||
        uint32_t apiVersion;
 | 
			
		||||
        std::optional<std::vector<ripple::STLedgerEntry>> signerLists;
 | 
			
		||||
        // validated should be sent via framework
 | 
			
		||||
@@ -74,6 +75,7 @@ public:
 | 
			
		||||
         * @param sle The account data
 | 
			
		||||
         * @param isDisallowIncomingEnabled Whether disallow incoming is enabled
 | 
			
		||||
         * @param isClawbackEnabled Whether clawback is enabled
 | 
			
		||||
         * @param isTokenEscrowEnabled Whether token escrow is enabled
 | 
			
		||||
         * @param version The API version
 | 
			
		||||
         * @param signerLists The signer lists
 | 
			
		||||
         */
 | 
			
		||||
@@ -83,6 +85,7 @@ public:
 | 
			
		||||
            ripple::STLedgerEntry sle,
 | 
			
		||||
            bool isDisallowIncomingEnabled,
 | 
			
		||||
            bool isClawbackEnabled,
 | 
			
		||||
            bool isTokenEscrowEnabled,
 | 
			
		||||
            uint32_t version,
 | 
			
		||||
            std::optional<std::vector<ripple::STLedgerEntry>> signerLists = std::nullopt
 | 
			
		||||
        )
 | 
			
		||||
@@ -91,6 +94,7 @@ public:
 | 
			
		||||
            , accountData(std::move(sle))
 | 
			
		||||
            , isDisallowIncomingEnabled(isDisallowIncomingEnabled)
 | 
			
		||||
            , isClawbackEnabled(isClawbackEnabled)
 | 
			
		||||
            , isTokenEscrowEnabled(isTokenEscrowEnabled)
 | 
			
		||||
            , apiVersion(version)
 | 
			
		||||
            , signerLists(std::move(signerLists))
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -329,6 +329,7 @@ TEST_F(RPCAccountInfoHandlerTest, SignerListsInvalid)
 | 
			
		||||
        .WillByDefault(Return(createLegacyFeeSettingBlob(1, 2, 3, 4, 0)));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::DisallowIncoming, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::Clawback, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::TokenEscrow, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*backend_, doFetchLedgerObject).Times(2);
 | 
			
		||||
 | 
			
		||||
    static auto const kINPUT = json::parse(
 | 
			
		||||
@@ -434,6 +435,7 @@ TEST_F(RPCAccountInfoHandlerTest, SignerListsTrueV2)
 | 
			
		||||
        .WillByDefault(Return(createSignerLists({{kACCOUNT1, 1}, {kACCOUNT2, 1}}).getSerializer().peekData()));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::DisallowIncoming, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::Clawback, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::TokenEscrow, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*backend_, doFetchLedgerObject).Times(2);
 | 
			
		||||
 | 
			
		||||
    static auto const kINPUT = json::parse(
 | 
			
		||||
@@ -537,6 +539,7 @@ TEST_F(RPCAccountInfoHandlerTest, SignerListsTrueV1)
 | 
			
		||||
        .WillByDefault(Return(createSignerLists({{kACCOUNT1, 1}, {kACCOUNT2, 1}}).getSerializer().peekData()));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::DisallowIncoming, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::Clawback, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::TokenEscrow, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*backend_, doFetchLedgerObject).Times(2);
 | 
			
		||||
 | 
			
		||||
    static auto const kINPUT = json::parse(
 | 
			
		||||
@@ -613,6 +616,7 @@ TEST_F(RPCAccountInfoHandlerTest, Flags)
 | 
			
		||||
        .WillByDefault(Return(accountRoot.getSerializer().peekData()));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::DisallowIncoming, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::Clawback, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::TokenEscrow, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*backend_, doFetchLedgerObject);
 | 
			
		||||
 | 
			
		||||
    static auto const kINPUT = json::parse(
 | 
			
		||||
@@ -644,6 +648,7 @@ TEST_F(RPCAccountInfoHandlerTest, IdentAndSignerListsFalse)
 | 
			
		||||
        .WillByDefault(Return(accountRoot.getSerializer().peekData()));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::DisallowIncoming, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::Clawback, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::TokenEscrow, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*backend_, doFetchLedgerObject);
 | 
			
		||||
 | 
			
		||||
    static auto const kINPUT = json::parse(
 | 
			
		||||
@@ -724,6 +729,7 @@ TEST_F(RPCAccountInfoHandlerTest, DisallowIncoming)
 | 
			
		||||
        .WillByDefault(Return(accountRoot.getSerializer().peekData()));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::DisallowIncoming, _)).WillOnce(Return(true));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::Clawback, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::TokenEscrow, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*backend_, doFetchLedgerObject);
 | 
			
		||||
 | 
			
		||||
    static auto const kINPUT = json::parse(
 | 
			
		||||
@@ -742,14 +748,14 @@ TEST_F(RPCAccountInfoHandlerTest, DisallowIncoming)
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(RPCAccountInfoHandlerTest, Clawback)
 | 
			
		||||
TEST_F(RPCAccountInfoHandlerTest, AmendmentsEnabled)
 | 
			
		||||
{
 | 
			
		||||
    auto const expectedOutput = fmt::format(
 | 
			
		||||
        R"JSON({{
 | 
			
		||||
            "account_data": {{
 | 
			
		||||
                "Account": "{}",
 | 
			
		||||
                "Balance": "200",
 | 
			
		||||
                "Flags": 2180972544,
 | 
			
		||||
                "Flags": 3254714368,
 | 
			
		||||
                "LedgerEntryType": "AccountRoot",
 | 
			
		||||
                "OwnerCount": 2,
 | 
			
		||||
                "PreviousTxnID": "{}",
 | 
			
		||||
@@ -768,7 +774,8 @@ TEST_F(RPCAccountInfoHandlerTest, Clawback)
 | 
			
		||||
                "passwordSpent": true,
 | 
			
		||||
                "requireAuthorization": true,
 | 
			
		||||
                "requireDestinationTag": true,
 | 
			
		||||
                "allowTrustLineClawback": true
 | 
			
		||||
                "allowTrustLineClawback": true,
 | 
			
		||||
                "allowTrustLineLocking": true
 | 
			
		||||
            }},
 | 
			
		||||
            "ledger_hash": "{}",
 | 
			
		||||
            "ledger_index": 30,
 | 
			
		||||
@@ -789,7 +796,7 @@ TEST_F(RPCAccountInfoHandlerTest, Clawback)
 | 
			
		||||
        kACCOUNT,
 | 
			
		||||
        ripple::lsfDefaultRipple | ripple::lsfGlobalFreeze | ripple::lsfRequireDestTag | ripple::lsfRequireAuth |
 | 
			
		||||
            ripple::lsfDepositAuth | ripple::lsfDisableMaster | ripple::lsfDisallowXRP | ripple::lsfNoFreeze |
 | 
			
		||||
            ripple::lsfPasswordSpent | ripple::lsfAllowTrustLineClawback,
 | 
			
		||||
            ripple::lsfPasswordSpent | ripple::lsfAllowTrustLineClawback | ripple::lsfAllowTrustLineLocking,
 | 
			
		||||
        2,
 | 
			
		||||
        200,
 | 
			
		||||
        2,
 | 
			
		||||
@@ -800,6 +807,7 @@ TEST_F(RPCAccountInfoHandlerTest, Clawback)
 | 
			
		||||
        .WillByDefault(Return(accountRoot.getSerializer().peekData()));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::DisallowIncoming, _)).WillOnce(Return(false));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::Clawback, _)).WillOnce(Return(true));
 | 
			
		||||
    EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(_, Amendments::TokenEscrow, _)).WillOnce(Return(true));
 | 
			
		||||
    EXPECT_CALL(*backend_, doFetchLedgerObject);
 | 
			
		||||
 | 
			
		||||
    static auto const kINPUT = json::parse(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user