1#include <test/jtx/Env.h> 
    2#include <test/jtx/attester.h> 
    3#include <test/jtx/xchain_bridge.h> 
    5#include <xrpl/json/json_value.h> 
    6#include <xrpl/protocol/Issue.h> 
    7#include <xrpl/protocol/SField.h> 
    8#include <xrpl/protocol/STBase.h> 
    9#include <xrpl/protocol/STInteger.h> 
   10#include <xrpl/protocol/STObject.h> 
   11#include <xrpl/protocol/TxFlags.h> 
   12#include <xrpl/protocol/XChainAttestations.h> 
   13#include <xrpl/protocol/jss.h> 
   22    Account const& lockingChainDoor,
 
   23    Issue const& lockingChainIssue,
 
   24    Account const& issuingChainDoor,
 
   25    Issue const& issuingChainIssue)
 
   28    jv[jss::LockingChainDoor] = lockingChainDoor.
human();
 
   29    jv[jss::LockingChainIssue] = 
to_json(lockingChainIssue);
 
   30    jv[jss::IssuingChainDoor] = issuingChainDoor.
human();
 
   31    jv[jss::IssuingChainIssue] = 
to_json(issuingChainIssue);
 
 
   38    Account const& lockingChainDoor,
 
   39    Issue const& lockingChainIssue,
 
   40    Account const& issuingChainDoor,
 
   41    Issue const& issuingChainIssue)
 
   44    jv[jss::LockingChainDoor] = lockingChainDoor.
human();
 
   45    jv[jss::LockingChainIssue] = 
to_json(lockingChainIssue);
 
   46    jv[jss::IssuingChainDoor] = issuingChainDoor.
human();
 
   47    jv[jss::IssuingChainIssue] = 
to_json(issuingChainIssue);
 
 
   60    jv[jss::Account] = acc.
human();
 
   61    jv[sfXChainBridge.getJsonName()] = 
bridge;
 
   64        jv[sfMinAccountCreateAmount.getJsonName()] =
 
   67    jv[jss::TransactionType] = jss::XChainCreateBridge;
 
 
   80    jv[jss::Account] = acc.
human();
 
   81    jv[sfXChainBridge.getJsonName()] = 
bridge;
 
   83        jv[sfSignatureReward.getJsonName()] =
 
   86        jv[sfMinAccountCreateAmount.getJsonName()] =
 
   89    jv[jss::TransactionType] = jss::XChainModifyBridge;
 
 
   98    Account const& otherChainSource)
 
  102    jv[jss::Account] = acc.
human();
 
  103    jv[sfXChainBridge.getJsonName()] = 
bridge;
 
  105    jv[sfOtherChainSource.getJsonName()] = otherChainSource.
human();
 
  107    jv[jss::TransactionType] = jss::XChainCreateClaimID;
 
 
  121    jv[jss::Account] = acc.
human();
 
  122    jv[sfXChainBridge.getJsonName()] = 
bridge;
 
  123    jv[sfXChainClaimID.getJsonName()] = claimID;
 
  126        jv[sfOtherChainDestination.getJsonName()] = dst->human();
 
  128    jv[jss::TransactionType] = jss::XChainCommit;
 
 
  142    jv[sfAccount.getJsonName()] = acc.
human();
 
  143    jv[sfXChainBridge.getJsonName()] = 
bridge;
 
  144    jv[sfXChainClaimID.getJsonName()] = claimID;
 
  145    jv[sfDestination.getJsonName()] = dst.
human();
 
  148    jv[jss::TransactionType] = jss::XChainClaim;
 
 
  162    jv[sfAccount.getJsonName()] = acc.
human();
 
  163    jv[sfXChainBridge.getJsonName()] = 
bridge;
 
  164    jv[sfDestination.getJsonName()] = dst.
human();
 
  166    jv[sfSignatureReward.getJsonName()] =
 
  169    jv[jss::TransactionType] = jss::XChainAccountCreateCommit;
 
 
  180    bool wasLockingChainSend,
 
  202    result[sfAccount.getJsonName()] = submittingAccount.
human();
 
  203    result[sfXChainBridge.getJsonName()] = jvBridge;
 
  206    result[sfPublicKey.getJsonName()] = 
strHex(pk.slice());
 
  207    result[sfSignature.getJsonName()] = 
strHex(
sig);
 
  208    result[sfOtherChainSource.getJsonName()] = 
toBase58(sendingAccount);
 
  209    result[sfAmount.getJsonName()] =
 
  211    result[sfAttestationRewardAccount.getJsonName()] = 
toBase58(rewardAccount);
 
  212    result[sfWasLockingChainSend.getJsonName()] = wasLockingChainSend ? 1 : 0;
 
  214    result[sfXChainClaimID.getJsonName()] =
 
  217        result[sfDestination.getJsonName()] = 
toBase58(*dst);
 
  219    result[jss::TransactionType] = jss::XChainAddClaimAttestation;
 
 
  232    bool wasLockingChainSend,
 
  255    result[sfAccount.getJsonName()] = submittingAccount.
human();
 
  256    result[sfXChainBridge.getJsonName()] = jvBridge;
 
  259    result[sfPublicKey.getJsonName()] = 
strHex(pk.slice());
 
  260    result[sfSignature.getJsonName()] = 
strHex(
sig);
 
  261    result[sfOtherChainSource.getJsonName()] = 
toBase58(sendingAccount);
 
  262    result[sfAmount.getJsonName()] =
 
  264    result[sfAttestationRewardAccount.getJsonName()] = 
toBase58(rewardAccount);
 
  265    result[sfWasLockingChainSend.getJsonName()] = wasLockingChainSend ? 1 : 0;
 
  267    result[sfXChainAccountCreateCount.getJsonName()] =
 
  269    result[sfDestination.getJsonName()] = 
toBase58(dst);
 
  270    result[sfSignatureReward.getJsonName()] =
 
  273    result[jss::TransactionType] = jss::XChainAddAccountCreateAttestation;
 
 
  285    bool wasLockingChainSend,
 
  292    assert(fromIdx + numAtts <= rewardAccounts.size());
 
  296    for (
auto i = fromIdx; i < fromIdx + numAtts; ++i)
 
 
  318    bool wasLockingChainSend,
 
  325    assert(fromIdx + numAtts <= rewardAccounts.size());
 
  329    for (
auto i = fromIdx; i < fromIdx + numAtts; ++i)
 
 
  355    , scAttester(
"scAttester")
 
  356    , scReward(
"scReward")
 
  358    , mcuAlice(
"mcuAlice")
 
  360    , mcuCarol(
"mcuCarol")
 
  363    , scuAlice(
"scuAlice")
 
  365    , scuCarol(
"scuCarol")
 
  378        for (
int i = 0; i < numSigners; ++i)
 
  392        for (
int i = 0; i < numSigners; ++i)
 
  424    , split_reward_quorum(
 
  426    , split_reward_everyone(
divide(
 
  430    , tiny_reward(
drops(37))
 
  431    , tiny_reward_split((
divide(
 
  434          tiny_reward.issue())))
 
  435    , tiny_reward_remainder(
 
  440              tiny_reward.issue()))
 
  442    , xrp_dust(
divide(one_xrp, STAmount(10000), one_xrp.issue()))
 
 
UInt size() const
Number of values in array or object.
 
A currency issued by an account.
 
Json::Value getJson(JsonOptions=JsonOptions::none) const override
 
Immutable cryptographic account descriptor.
 
PublicKey const & pk() const
Return the public key.
 
static Account const master
The master account.
 
SecretKey const & sk() const
Return the secret key.
 
std::string const & human() const
Returns the human readable public key.
 
A transaction testing environment.
 
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
 
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
 
Set the regular signature on a JTx.
 
T emplace_back(T... args)
 
constexpr std::size_t UT_XCHAIN_DEFAULT_QUORUM
 
Json::Value create_account_attestation(jtx::Account const &submittingAccount, Json::Value const &jvBridge, jtx::Account const &sendingAccount, jtx::AnyAmount const &sendingAmount, jtx::AnyAmount const &rewardAmount, jtx::Account const &rewardAccount, bool wasLockingChainSend, std::uint64_t createCount, jtx::Account const &dst, jtx::signer const &signer)
 
JValueVec claim_attestations(jtx::Account const &submittingAccount, Json::Value const &jvBridge, jtx::Account const &sendingAccount, jtx::AnyAmount const &sendingAmount, std::vector< jtx::Account > const &rewardAccounts, bool wasLockingChainSend, std::uint64_t claimID, std::optional< jtx::Account > const &dst, std::vector< jtx::signer > const &signers, std::size_t const numAtts, std::size_t const fromIdx)
 
Json::Value bridge_create(Account const &acc, Json::Value const &bridge, STAmount const &reward, std::optional< STAmount > const &minAccountCreate)
 
Json::Value claim_attestation(jtx::Account const &submittingAccount, Json::Value const &jvBridge, jtx::Account const &sendingAccount, jtx::AnyAmount const &sendingAmount, jtx::Account const &rewardAccount, bool wasLockingChainSend, std::uint64_t claimID, std::optional< jtx::Account > const &dst, jtx::signer const &signer)
 
Json::Value bridge(Account const &lockingChainDoor, Issue const &lockingChainIssue, Account const &issuingChainDoor, Issue const &issuingChainIssue)
 
Json::Value signers(Account const &account, std::uint32_t quorum, std::vector< signer > const &v)
 
PrettyAmount drops(Integer i)
Returns an XRP PrettyAmount, which is trivially convertible to STAmount.
 
Json::Value sidechain_xchain_account_create(Account const &acc, Json::Value const &bridge, Account const &dst, AnyAmount const &amt, AnyAmount const &reward)
 
Json::Value xchain_claim(Account const &acc, Json::Value const &bridge, std::uint32_t claimID, AnyAmount const &amt, Account const &dst)
 
constexpr std::size_t UT_XCHAIN_DEFAULT_NUM_SIGNERS
 
JValueVec create_account_attestations(jtx::Account const &submittingAccount, Json::Value const &jvBridge, jtx::Account const &sendingAccount, jtx::AnyAmount const &sendingAmount, jtx::AnyAmount const &rewardAmount, std::vector< jtx::Account > const &rewardAccounts, bool wasLockingChainSend, std::uint64_t createCount, jtx::Account const &dst, std::vector< jtx::signer > const &signers, std::size_t const numAtts, std::size_t const fromIdx)
 
FeatureBitset testable_amendments()
 
Json::Value xchain_create_claim_id(Account const &acc, Json::Value const &bridge, STAmount const &reward, Account const &otherChainSource)
 
Json::Value bridge_modify(Account const &acc, Json::Value const &bridge, std::optional< STAmount > const &reward, std::optional< STAmount > const &minAccountCreate)
 
Buffer sign_claim_attestation(PublicKey const &pk, SecretKey const &sk, STXChainBridge const &bridge, AccountID const &sendingAccount, STAmount const &sendingAmount, AccountID const &rewardAccount, bool wasLockingChainSend, std::uint64_t claimID, std::optional< AccountID > const &dst)
 
Json::Value xchain_commit(Account const &acc, Json::Value const &bridge, std::uint32_t claimID, AnyAmount const &amt, std::optional< Account > const &dst)
 
Buffer sign_create_account_attestation(PublicKey const &pk, SecretKey const &sk, STXChainBridge const &bridge, AccountID const &sendingAccount, STAmount const &sendingAmount, STAmount const &rewardAmount, AccountID const &rewardAccount, bool wasLockingChainSend, std::uint64_t createCount, AccountID const &dst)
 
XRP_t const XRP
Converts to XRP Issue or STAmount.
 
Json::Value bridge_rpc(Account const &lockingChainDoor, Issue const &lockingChainIssue, Account const &issuingChainDoor, Issue const &issuingChainIssue)
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
 
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
 
STAmount divide(STAmount const &amount, Rate const &rate)
 
STAmount multiply(STAmount const &amount, Rate const &rate)
 
Json::Value to_json(Asset const &asset)
 
std::string strHex(FwdIt begin, FwdIt end)
 
Amount specifier with an option for any issuer.
 
void createScBridgeObjects(Env &scEnv)
 
void createMcBridgeObjects(Env &mcEnv)
 
std::vector< signer > const signers
 
void createBridgeObjects(Env &mcEnv, Env &scEnv)
 
A signer in a SignerList.