Merge pull request #2305 from XRPLF/xchain-bridge-docs

XChainBridge Docs
This commit is contained in:
oeggert
2024-01-09 17:09:11 -08:00
committed by GitHub
29 changed files with 2303 additions and 8 deletions

View File

@@ -189,6 +189,7 @@ Transaction instructions may contain fields of any of the following types:
| [UInt8][] | 16 | 8 | No | An 8-bit unsigned integer. |
| [UInt16][] | 1 | 16 | No | A 16-bit unsigned integer. The `TransactionType` is a special case of this type, with specific strings mapping to integer values. |
| [UInt32][] | 2 | 32 | No | A 32-bit unsigned integer. The `Flags` and `Sequence` fields on all transactions are examples of this type. |
| [XChainBridge][] | 25 | Variable | No | A bridge between two blockchains, identified by the door accounts and issued assets on both chains. |
[Length-prefixed]: #length-prefixing
@@ -368,6 +369,25 @@ When representing these fields in JSON objects, most are represented as JSON num
Another special case is the `TransactionType` field. In JSON, this field is conventionally represented as a string with the name of the transaction type, but in binary, this field is a UInt16. The `TRANSACTION_TYPES` object in the [definitions file](#definitions-file) maps these strings to specific numeric values.
### XChainBridge Fields
[XChainBridge]: #xchainbridge-fields
{{ include_svg("img/serialization-xchainbridge.svg", "XChainBridge format diagram") }}
The `XChainBridge` field, used in transactions and ledger entries related to [cross-chain bridges](cross-chain-bridges.html), is the only field of the XChainBridge type. It consists of 4 parts which together define a bridge between blockchains:
- The locking chain door account, a length-prefixed [AccountID][].
- The locking chain asset type, an [STIssue][].
- The issuing chain door account, a length-prefixed [AccountID][].
- The issuing chain asset type, an [STIssue][].
The two nested [STIssue][] types are each either 160 or 320 bits. The STIssue field is 160 bits if the currency code it contains is all 0's, meaning that the bridged asset is the native asset of its respective chain, for example XRP on the XRP Ledger Mainnet. If the currency code is nonzero, then the STIssue field also contains the (non-length-prefixed) AccountID of the token's issuer on its native chain.
**Note:** The door AccountID values are length-prefixed, but the issuer AccountID values are not.
In total, an XChainBridge field is always either 656, 816, or 976 bits (82, 102, or 122 bytes) depending on whether zero, one, or both of the assets are the native asset on their respective chain.
<!-- SPELLING_IGNORE: pathset, stobject, starray, ledgerentry, vector256, accountids, uint -->
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}

View File

@@ -0,0 +1,75 @@
---
html: bridge.html
parent: ledger-entry-types.html
blurb: A `bridge` object represents a single cross-chain bridge that connects and enables value to move efficiently between two blockchains.
labels:
- Interoperability
status: not_enabled
---
# Bridge
_(Requires the [XChainBridge amendment][] :not_enabled:)_
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L286-L300 "Source")
The `Bridge` ledger entry represents a single cross-chain bridge that connects the XRP Ledger with another blockchain, such as its sidechain, and enables value in the form of XRP and other tokens (IOUs) to move efficiently between the two blockchains.
## Example Bridge JSON
```json
{
"Account": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
"Flags": 0,
"LedgerEntryType": "Bridge",
"MinAccountCreateAmount": "2000000000",
"OwnerNode": "0",
"PreviousTxnID": "67A8A1B36C1B97BE3AAB6B19CB3A3069034877DE917FD1A71919EAE7548E5636",
"PreviousTxnLgrSeq": 102,
"SignatureReward": "204",
"XChainAccountClaimCount": "0",
"XChainAccountCreateCount": "0",
"XChainBridge": {
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
},
"LockingChainDoor": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
"LockingChainIssue": {
"currency": "XRP"
}
},
"XChainClaimID": "1",
"index": "9F2C9E23343852036AFD323025A8506018ABF9D4DBAA746D61BF1CFB5C297D10"
}
```
## Bridge Fields
In addition to the [common fields](ledger-entry-common-fields.html), `{{currentpage.name}}` entries have the following fields:
| Field | JSON Type | Internal Type | Required? | Description |
|:---------------------------|:--------------------|:------------------|:----------|:------------|
| `Account` | String | Account | Yes | The account that submitted the `XChainCreateBridge` transaction on the blockchain. |
| `MinAccountCreateAmount` | [Currency Amount][] | Amount | No | The minimum amount, in XRP, required for an `XChainAccountCreateCommit` transaction. If this isn't present, the `XChainAccountCreateCommit` transaction will fail. This field can only be present on XRP-XRP bridges. |
| `SignatureReward` | [Currency Amount][] | Amount | Yes | The total amount, in XRP, to be rewarded for providing a signature for cross-chain transfer or for signing for the cross-chain reward. This amount will be split among the signers. |
| `XChainAccountClaimCount` | Number | UInt64 | Yes | A counter used to order the execution of account create transactions. It is incremented every time a `XChainAccountCreateCommit` transaction is "claimed" on the destination chain. When the "claim" transaction is run on the destination chain, the `XChainAccountClaimCount` must match the value that the `XChainAccountCreateCount` had at the time the `XChainAccountClaimCount` was run on the source chain. This orders the claims so that they run in the same order that the `XChainAccountCreateCommit` transactions ran on the source chain, to prevent transaction replay. |
| `XChainAccountCreateCount` | Number | UInt64 | Yes | A counter used to order the execution of account create transactions. It is incremented every time a successful `XChainAccountCreateCommit` transaction is run for the source chain. |
| `XChainBridge` | XChainBridge | XChain_Bridge | Yes | The door accounts and assets of the bridge this object correlates to. |
| `XChainClaimID` | Number | UInt64 | Yes | The value of the next `XChainClaimID` to be created. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | String | Account | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | Issue | Issue | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | String | Account | Yes | The door account on the locking chain. |
| `LockingChainIssue` | Issue | Issue | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,109 @@
---
html: xchainownedclaimid.html
parent: ledger-entry-types.html
blurb: An `XChainOwnedClaimID` object represents *one* cross-chain transfer of value.
labels:
- Interoperability
status: not_enabled
---
# XChainOwnedClaimID
_(Requires the [XChainBridge amendment][] :not_enabled:)_
[[Source]](https://github.com/seelabs/rippled/blob/xbridge/src/ripple/protocol/impl/LedgerFormats.cpp#L281-L293 "Source")
An `XChainOwnedClaimID` object represents *one* cross-chain transfer of value and includes information of the account on the source chain that locks or burns the funds on the source chain.
The `XChainOwnedClaimID` object must be acquired on the destination chain before submitting a `XChainCommit` on the source chain. Its purpose is to prevent transaction replay attacks and is also used as a place to collect attestations from witness servers.
An `XChainCreateClaimID` transaction is used to create a new `XChainOwnedClaimID`. The ledger object is destroyed when the funds are successfully claimed on the destination chain.
## Example XChainOwnedClaimID JSON
```json
{
"Account": "rBW1U7J9mEhEdk6dMHEFUjqQ7HW7WpaEMi",
"Flags": 0,
"OtherChainSource": "r9oXrvBX5aDoyMGkoYvzazxDhYoWFUjz8p",
"OwnerNode": "0",
"PreviousTxnID": "1CFD80E9CF232B8EED62A52857DE97438D12230C06496932A81DEFA6E66070A6",
"PreviousTxnLgrSeq": 58673,
"SignatureReward": "100",
"XChainBridge": {
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
},
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
"LockingChainIssue": {
"currency": "XRP"
}
},
"XChainClaimAttestations": [
{
"XChainClaimProofSig": {
"Amount": "1000000",
"AttestationRewardAccount": "rfgjrgEJGDxfUY2U8VEDs7BnB1jiH3ofu6",
"AttestationSignerAccount": "rfsxNxZ6xB1nTPhTMwQajNnkCxWG8B714n",
"Destination": "rBW1U7J9mEhEdk6dMHEFUjqQ7HW7WpaEMi",
"PublicKey": "025CA526EF20567A50FEC504589F949E0E3401C13EF76DD5FD1CC2850FA485BD7B",
"WasLockingChainSend": 1
}
},
{
"XChainClaimProofSig": {
"Amount": "1000000",
"AttestationRewardAccount": "rUUL1tP523M8KimERqVS7sxb1tLLmpndyv",
"AttestationSignerAccount": "rEg5sHxZVTNwRL3BAdMwJatkmWDzHMmzDF",
"Destination": "rBW1U7J9mEhEdk6dMHEFUjqQ7HW7WpaEMi",
"PublicKey": "03D40434A6843638681E2F215310EBC4131AFB12EA85985DA073183B732525F7C9",
"WasLockingChainSend": 1
},
}
],
"XChainClaimID": "b5",
"LedgerEntryType": "XChainOwnedClaimID",
"LedgerIndex": "20B136D7BF6D2E3D610E28E3E6BE09F5C8F4F0241BBF6E2D072AE1BACB1388F5"
}
```
## XChainOwnedClaimID Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------------|:------------------|:------------------|:----------|:----------------|
| `Account` | `string` | `ACCOUNT` | Yes | The account that owns this object. |
| `LedgerIndex` | `string` | `HASH256` | Yes | The ledger index is a hash of a unique prefix for `XChainOwnedClaimID`s, the actual `XChainClaimID` value, and the fields in `XChainBridge`. |
| `OtherChainSource` | `string` | `ACCOUNT` | Yes | The account that must send the corresponding `XChainCommit` on the source chain. The destination may be specified in the `XChainCommit` transaction, which means that if the `OtherChainSource` isn't specified, another account can try to specify a different destination and steal the funds. This also allows tracking only a single set of signatures, since we know which account will send the `XChainCommit` transaction. |
| `SignatureReward` | `Currency Amount` | `AMOUNT` | Yes | The total amount to pay the witness servers for their signatures. It must be at least the value of `SignatureReward` in the `Bridge` ledger object. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The door accounts and assets of the bridge this object correlates to. |
| `XChainClaimAttestations` | `array` | `ARRAY` | Yes | Attestations collected from the witness servers. This includes the parameters needed to recreate the message that was signed, including the amount, which chain (locking or issuing), optional destination, and reward account for that signature. |
| `XChainClaimID` | `string` | `UINT64` | Yes | The unique sequence number for a cross-chain transfer. |
### XChainClaimAttestations Fields
| Field | JSON Type | Internal Type | Required | Description |
|-------------------------------|-------------------|---------------|----------|-------------|
| `XChainClaimProofSig` | `array` | `OBJECT` | Yes | An attestation from one witness server. |
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount to claim in the `XChainCommit` transaction on the destination chain. |
| `AttestationRewardAccount` | `string` | `ACCOUNT` | Yes | The account that should receive this signer's share of the `SignatureReward`. |
| `AttestationSignerAccount` | `string` | `ACCOUNT` | Yes | The account on the door account's signer list that is signing the transaction. |
| `Destination` | `string` | `ACCOUNT` | No | The destination account for the funds on the destination chain. |
| `PublicKey` | `string` | `BLOB` | Yes | The public key used to verify the signature. |
| `WasLockingChainSend` | `number` | `UINT8` | Yes | A boolean representing the chain where the event occurred. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,95 @@
---
html: xchainownedcreateaccountclaimid.html
parent: ledger-entry-types.html
blurb: The `XChainOwnedCreateAccountClaimID` ledger object is used to collect attestations for creating an account via a cross-chain transfer.
labels:
- Interoperability
status: not_enabled
---
# XChainOwnedCreateAccountClaimID
_(Requires the [XChainBridge amendment][] :not_enabled:)_
[[Source]](https://github.com/seelabs/rippled/blob/xbridge/src/ripple/protocol/impl/LedgerFormats.cpp#L296-L306 "Source")
The `XChainOwnedCreateAccountClaimID` ledger object is used to collect attestations for creating an account via a cross-chain transfer.
It is created when an `XChainAddAccountCreateAttestation` transaction adds a signature attesting to a `XChainAccountCreateCommit` transaction and the `XChainAccountCreateCount` is greater than or equal to the current `XChainAccountClaimCount` on the `Bridge` ledger object.
The ledger object is destroyed when all the attestations have been received and the funds have transferred to the new account.
## Example XChainOwnedCreateAccountClaimID JSON
```json
{
"LedgerEntryType": "XChainOwnedCreateAccountClaimID",
"LedgerIndex": "5A92F6ED33FDA68FB4B9FD140EA38C056CD2BA9673ECA5B4CEF40F2166BB6F0C",
"NewFields": {
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"XChainAccountCreateCount": "66",
"XChainBridge": {
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
},
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
"LockingChainIssue": {
"currency": "XRP"
}
},
"XChainCreateAccountAttestations": [
{
"XChainCreateAccountProofSig": {
"Amount": "20000000",
"AttestationRewardAccount": "rMtYb1vNdeMDpD9tA5qSFm8WXEBdEoKKVw",
"AttestationSignerAccount": "rL8qTrAvZ8Q1o1H9H9Ahpj3xjgmRvFLvJ3",
"Destination": "rBW1U7J9mEhEdk6dMHEFUjqQ7HW7WpaEMi",
"PublicKey": "021F7CC4033EFBE5E8214B04D1BAAEC14808DC6C02F4ACE930A8EF0F5909B0C438",
"SignatureReward": "100",
"WasLockingChainSend": 1
}
}
]
}
}
```
## XChainOwnedCreateAccountClaimID Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:----------------------------------|:---------------|:------------------|:----------|:------------|
| `Account` | `string` | `ACCOUNT` | Yes | The account that owns this object. |
| `LedgerIndex` | `string` | `HASH256` | Yes | The ledger index is a hash of a unique prefix for `XChainOwnedClaimID`s, the actual `XChainClaimID` value, and the fields in `XChainBridge`. |
| `XChainAccountCreateCount` | `number` | `UINT64` | Yes | An integer that determines the order that accounts created through cross-chain transfers must be performed. Smaller numbers must execute before larger numbers. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The door accounts and assets of the bridge this object correlates to. |
| `XChainCreateAccountAttestations` | `array` | `ARRAY` | Yes | Attestations collected from the witness servers. This includes the parameters needed to recreate the message that was signed, including the amount, destination, signature reward amount, and reward account for that signature. With the exception of the reward account, all signatures must sign the message created with common parameters. |
### XChainCreateAccountAttestations Fields
| Field | JSON Type | Internal Type | Required | Description |
|-------------------------------|-------------------|---------------|----------|-------------|
| `XChainCreateAccountProofSig` | `array` | `OBJECT` | Yes | An attestation from one witness server. |
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount committed by the `XChainAccountCreateCommit` transaction on the source chain. |
| `AttestationRewardAccount` | `string` | `ACCOUNT` | Yes | The account that should receive this signer's share of the `SignatureReward`. |
| `AttestationSignerAccount` | `string` | `ACCOUNT` | Yes | The account on the door account's signer list that is signing the transaction. |
| `Destination` | `string` | `ACCOUNT` | Yes | The destination account for the funds on the destination chain. |
| `PublicKey` | `string` | `BLOB` | Yes | The public key used to verify the signature. |
| `WasLockingChainSend` | `number` | `UINT8` | Yes | A boolean representing the chain where the event occurred. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,66 @@
---
html: xchainaccountcreatecommit.html
parent: transaction-types.html
blurb: Create an account on one of the chains that the bridge connects. This account serves as the bridge entrance for that chain.
labels:
- Interoperability
status: not_enabled
---
# XChainAccountCreateCommit
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L466-L474 "Source")
_(Requires the [XChainBridge amendment][] :not_enabled:)_
This transaction can only be used for XRP-XRP bridges.
The `XChainAccountCreateCommit` transaction creates a new account for a witness server to submit transactions on an issuing chain.
**Warning:** This transaction should only be executed if the witness attestations will be reliably delivered to the destination chain. If the signatures aren't delivered, then account creation will be blocked until attestations are received. This can be used maliciously; to disable this transaction on XRP-XRP bridges, omit the bridge's `MinAccountCreateAmount` field.
## Example XChainAccountCreateCommit JSON
```json
{
"Account": "rwEqJ2UaQHe7jihxGqmx6J4xdbGiiyMaGa",
"Destination": "rD323VyRjgzzhY4bFpo44rmyh2neB5d8Mo",
"TransactionType": "XChainAccountCreateCommit",
"Amount": "20000000",
"SignatureReward": "100",
"XChainBridge": {
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
"LockingChainIssue": {
"currency": "XRP"
},
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
}
}
}
```
## XChainAccountCreateCommit Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:------------------|:------------------|:------------------|:----------| :-----------|
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount, in XRP, to use for account creation. This must be greater than or equal to the `MinAccountCreateAmount` specified in the `Bridge` ledger object. |
| `Destination` | `string` | `ACCOUNT` | Yes | The destination account on the destination chain. |
| `SignatureReward` | `Currency Amount` | `AMOUNT` | No | The amount, in XRP, to be used to reward the witness servers for providing signatures. This must match the amount on the `Bridge` ledger object. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to create accounts for. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,83 @@
---
html: xchainaddaccountcreateattestation.html
parent: transaction-types.html
blurb: The `XChainAddAccountCreateAttestation` transaction provides an attestation from a witness server that a `XChainAccountCreateCommit` transaction occurred on the other chain.
labels:
- Interoperability
status: not_enabled
---
# XChainAddAccountCreateAttestation
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L447-L464 "Source")
_(Requires the [XChainBridge amendment][] :not_enabled:)_
The `XChainAddAccountCreateAttestation` transaction provides an attestation from a witness server that an `XChainAccountCreateCommit` transaction occurred on the other chain.
The signature must be from one of the keys on the door's signer list at the time the signature was provided. If the signature list changes between the time the signature was submitted and the quorum is reached, the new signature set is used and some of the currently collected signatures may be removed.
Any account can submit signatures.
**Note:** The reward is only sent to accounts that have keys on the current list. A quorum of signers need to agree on the `SignatureReward`, the same way they need to agree on the other data. A single witness server can't provide an incorrect value for this in an attempt to collect a larger reward.
## Example XChainAddAccountCreateAttestation JSON
```json
{
"Account": "rDr5okqGKmMpn44Bbhe5WAfDQx8e9XquEv",
"TransactionType": "XChainAddAccountCreateAttestation",
"OtherChainSource": "rUzB7yg1LcFa7m3q1hfrjr5w53vcWzNh3U",
"Destination": "rJMfWNVbyjcCtds8kpoEjEbYQ41J5B6MUd",
"Amount": "2000000000",
"PublicKey": "EDF7C3F9C80C102AF6D241752B37356E91ED454F26A35C567CF6F8477960F66614",
"Signature": "F95675BA8FDA21030DE1B687937A79E8491CE51832D6BEEBC071484FA5AF5B8A0E9AFF11A4AA46F09ECFFB04C6A8DAE8284AF3ED8128C7D0046D842448478500",
"WasLockingChainSend": 1,
"AttestationRewardAccount": "rpFp36UHW6FpEcZjZqq5jSJWY6UCj3k4Es",
"AttestationSignerAccount": "rpWLegmW9WrFBzHUj7brhQNZzrxgLj9oxw",
"XChainAccountCreateCount": "2",
"SignatureReward": "204",
"XChainBridge": {
"LockingChainDoor": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
"LockingChainIssue": {
"currency": "XRP"
},
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
}
},
"Fee": "20"
}
```
## XChainAddAccountCreateAttestation Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:---------------------------|:------------------|:------------------|:----------|:------------|
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount committed by the `XChainAccountCreateCommit` transaction on the source chain. |
| `AttestationRewardAccount` | `string` | `ACCOUNT` | Yes | The account that should receive this signer's share of the `SignatureReward`. |
| `AttestationSignerAccount` | `string` | `ACCOUNT` | Yes | The account on the door account's signer list that is signing the transaction. |
| `Destination` | `string` | `ACCOUNT` | Yes | The destination account for the funds on the destination chain. |
| `OtherChainSource` | `string` | `ACCOUNT` | Yes | The account on the source chain that submitted the `XChainAccountCreateCommit` transaction that triggered the event associated with the attestation. |
| `PublicKey` | `string` | `BLOB` | Yes | The public key used to verify the signature. |
| `Signature` | `string` | `BLOB` | Yes | The signature attesting to the event on the other chain. |
| `SignatureReward` | `Currency Amount` | `AMOUNT` | Yes | The signature reward paid in the `XChainAccountCreateCommit` transaction. |
| `WasLockingChainSend` | `number` | `UINT8` | Yes | A boolean representing the chain where the event occurred. |
| `XChainAccountCreateCount` | `string` | `UINT64` | Yes | The counter that represents the order that the claims must be processed in. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge associated with the attestation. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,103 @@
---
html: xchainaddclaimattestation.html
parent: transaction-types.html
blurb: Submit proof (attestation) to the destination chain that an event that happened on the source chain.
labels:
- Interoperability
status: not_enabled
---
# XChainAddClaimAttestation
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L429-L445 "Source")
_(Requires the [XChainBridge amendment][] :not_enabled:)_
The `XChainAddClaimAttestation` transaction provides proof from a witness server, attesting to an `XChainCommit` transaction.
The signature must be from one of the keys on the door's signer list at the time the signature was provided. However, if the signature list changes between the time the signature was submitted and the quorum is reached, the new signature set is used and some of the currently collected signatures may be removed.
Any account can submit signatures.
**Note:** The reward is only sent to accounts that have keys on the current list. A quorum of signers need to agree on the `SignatureReward`, the same way they need to agree on the other data. A single witness server can't provide an incorrect value for this in an attempt to collect a larger reward.
## Example XChainAddClaimAttestation JSON
```json
{
"TransactionType": "XChainAddClaimAttestation",
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"XChainAttestationBatch": {
"XChainBridge": {
"IssuingChainDoor": "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt",
"IssuingChainIssue": {
"currency": "XRP"
},
"LockingChainDoor": "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC",
"LockingChainIssue": {
"currency": "XRP"
}
},
"XChainClaimAttestationBatch" : [
{
"XChainClaimAttestationBatchElement" : {
"Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx",
"Amount" : "100000000",
"AttestationSignerAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx",
"Destination" : "r9A8UyNpW3X46FUc6P7JZqgn6WgAPjBwPg",
"PublicKey" : "03DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0",
"Signature" : "616263",
"WasLockingChainSend" : 1,
"XChainClaimID" : "0000000000000000"
}
}
],
"XChainCreateAccountAttestationBatch": [
{
"XChainCreateAccountAttestationBatchElement": {
"Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx",
"Amount": "1000000000",
"AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f",
"Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC",
"PublicKey": "03ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B5",
"Signature": "3044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D9CA7511FDFE352BB601F667A26",
"SignatureReward": "1000000",
"WasLockingChainSend": 1,
"XChainAccountCreateCount": "0000000000000001"
}
}
]
}
}
```
## XChainAddClaimAttestation Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:---------------------------|:------------------|:------------------|:----------|-------------|
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount committed by the `XChainCommit` transaction on the source chain. |
| `AttestationRewardAccount` | `string` | `ACCOUNT` | Yes | The account that should receive this signer's share of the `SignatureReward`. |
| `AttestationSignerAccount` | `string` | `ACCOUNT` | Yes | The account on the door account's signer list that is signing the transaction. |
| `Destination` | `string` | `ACCOUNT` | No | The destination account for the funds on the destination chain (taken from the `XChainCommit` transaction).
| `OtherChainSource` | `string` | `ACCOUNT` | Yes | The account on the source chain that submitted the `XChainCommit` transaction that triggered the event associated with the attestation.
| `PublicKey` | `string` | `BLOB` | Yes | The public key used to verify the attestation signature. |
| `Signature` | `string` | `BLOB` | Yes | The signature attesting to the event on the other chain. |
| `WasLockingChainSend` | `number` | `UINT8` | Yes | A boolean representing the chain where the event occurred. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to use to transfer funds. |
| `XChainClaimID` | `string` | `UINT64` | Yes | The `XChainClaimID` associated with the transfer, which was included in the `XChainCommit` transaction. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,66 @@
---
html: xchainclaim.html
parent: transaction-types.html
blurb: Complete a cross-chain transfer of value by claiming the value on the destination chain.
labels:
- Interoperability
status: not_enabled
---
# XChainClaim
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L418-L427 "Source")
_(Requires the [XChainBridge amendment][] :not_enabled:)_
The `XChainClaim` transaction completes a cross-chain transfer of value. It allows a user to claim the value on the destination chain - the equivalent of the value locked on the source chain. A user can only claim the value if they own the cross-chain claim ID associated with the value locked on the source chain (the `Account` field). The user can send the funds to anyone (the `Destination` field). This transaction is only needed if an `OtherChainDestination` isn't specified in the `XChainCommit` transaction, or if something goes wrong with the automatic transfer of funds.
If the transaction succeeds in moving funds, the referenced `XChainOwnedClaimID` ledger object will be destroyed. This prevents transaction replay. If the transaction fails, the `XChainOwnedClaimID` won't be destroyed and the transaction can be re-run with different parameters.
## Example XChainClaim JSON
```json
{
"Account": "rahDmoXrtPdh7sUdrPjini3gcnTVYjbjjw",
"Amount": "10000",
"TransactionType": "XChainClaim",
"XChainClaimID": "13f",
"Destination": "rahDmoXrtPdh7sUdrPjini3gcnTVYjbjjw",
"XChainBridge": {
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
"LockingChainIssue": {
"currency": "XRP"
},
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
}
}
}
```
## XChainClaim Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:------------------------|:------------------|:------------------|:----------|-------------|
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount to claim on the destination chain. This must match the amount attested to on the attestations associated with this `XChainClaimID`. |
| `Destination` | `string` | `ACCOUNT` | Yes | The destination account on the destination chain. It must exist or the transaction will fail. However, if the transaction fails in this case, the sequence number and collected signatures won't be destroyed, and the transaction can be rerun with a different destination. |
| `DestinationTag` | `int` | `UINT32` | No | An integer destination tag. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to use for the transfer. |
| `XChainClaimID` | `string` | `UINT64` | Yes | The unique integer ID for the cross-chain transfer that was referenced in the corresponding `XChainCommit` transaction. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,62 @@
---
html: xchaincommit.html
parent: transaction-types.html
blurb: Initiate a cross-chain transfer of value.
labels:
- Interoperability
status: not_enabled
---
# XChainCommit
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L408-L416 "Source")
_(Requires the [XChainBridge amendment][] :not_enabled:)_
The `XChainCommit` is the second step in a cross-chain transfer. It puts assets into trust on the locking chain so that they can be wrapped on the issuing chain, or burns wrapped assets on the issuing chain so that they can be returned on the locking chain.
## Example XChainCommit JSON
```json
{
"Account": "rMTi57fNy2UkUb4RcdoUeJm7gjxVQvxzUo",
"TransactionType": "XChainCommit",
"XChainBridge": {
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
"LockingChainIssue": {
"currency": "XRP"
},
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
}
},
"Amount": "10000",
"XChainClaimID": "13f"
}
```
## XChainCommit Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:------------------------|:------------------|:------------------|:----------|-------------|
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The asset to commit, and the quantity. This must match the door account's `LockingChainIssue` (if on the locking chain) or the door account's `IssuingChainIssue` (if on the issuing chain). |
| `OtherChainDestination` | `string` | `ACCOUNT` | No | The destination account on the destination chain. If this is not specified, the account that submitted the `XChainCreateClaimID` transaction on the destination chain will need to submit a `XChainClaim` transaction to claim the funds. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to use to transfer funds. |
| `XChainClaimID` | `string` | `UINT64` | Yes | The unique integer ID for a cross-chain transfer. This must be acquired on the destination chain (via a `XChainCreateClaimID` transaction) and checked from a validated ledger before submitting this transaction. If an incorrect sequence number is specified, the funds will be lost. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,67 @@
---
html: xchaincreatebridge.html
parent: transaction-types.html
blurb: Create a bridge between two chains.
labels:
- Interoperability
status: not_enabled
---
# XChainCreateBridge
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L381-L388 "Source")
_(Requires the [XChainBridge amendment][] :not_enabled:)_
The `XChainCreateBridge` transaction creates a new `Bridge` ledger object and defines a new cross-chain bridge entrance on the chain that the transaction is submitted on. It includes information about door accounts and assets for the bridge.
The transaction must be submitted first by the locking chain door account. To set up a valid bridge, door accounts on both chains must submit this transaction, in addition to setting up witness servers.
The complete production-grade setup would also include a `SignerListSet` transaction on the two door accounts for the witnesses signing keys, as well as disabling the door accounts master key. This ensures that the witness servers are truly in control of the funds.
**Note:** Each door account can only have one bridge. This prevents the creation of duplicate bridges for the same asset, which can cause asset imbalances on either chain.
## Example XChainCreateBridge JSON
```json
{
"TransactionType": "XChainCreateBridge",
"Account": "rhWQzvdmhf5vFS35vtKUSUwNZHGT53qQsg",
"XChainBridge": {
"LockingChainDoor": "rhWQzvdmhf5vFS35vtKUSUwNZHGT53qQsg",
"LockingChainIssue": {
"currency": "XRP"
},
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
}
},
"SignatureReward": 200,
"MinAccountCreateAmount": 1000000
}
```
## XChainCreateBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:-------------------------|:------------------|:------------------|:----------------|:------|
| `MinAccountCreateAmount` | `Currency Amount` | `AMOUNT` | No | The minimum amount, in XRP, required for a `XChainAccountCreateCommit` transaction. If this isn't present, the `XChainAccountCreateCommit` transaction will fail. This field can only be present on XRP-XRP bridges. |
| `SignatureReward` | `Currency Amount` | `AMOUNT` | Yes | The total amount to pay the witness servers for their signatures. This amount will be split among the signers. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge (door accounts and assets) to create. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,65 @@
---
html: xchaincreateclaimid.html
parent: transaction-types.html
blurb: Create a cross-chain claim ID that is used for a cross-chain transfer.
labels:
- Interoperability
status: not_enabled
---
# XChainCreateClaimID
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L399-L406 "Source")
_(Requires the [XChainBridge amendment][] :not_enabled:)_
The `XChainCreateClaimID` transaction creates a new cross-chain claim ID that is used for a cross-chain transfer. A cross-chain claim ID represents *one* cross-chain transfer of value.
This transaction is the first step of a cross-chain transfer of value and is submitted on the destination chain, not the source chain.
It also includes the account on the source chain that locks or burns the funds on the source chain.
## Example XChainCreateClaimID JSON
```json
{
"Account": "rahDmoXrtPdh7sUdrPjini3gcnTVYjbjjw",
"OtherChainSource": "rMTi57fNy2UkUb4RcdoUeJm7gjxVQvxzUo",
"TransactionType": "XChainCreateClaimID",
"SignatureReward": "100",
"XChainBridge": {
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
"LockingChainIssue": {
"currency": "XRP"
},
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
}
}
}
```
## XChainCreateClaimID Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:-------------------|:------------------|:------------------|:----------|-------------|
| `OtherChainSource` | `string` | `ACCOUNT` | Yes | The account that must send the `XChainCommit` transaction on the source chain. |
| `SignatureReward` | `string` | `ACCOUNT` | Yes | The amount, in XRP, to reward the witness servers for providing signatures. This must match the amount on the `Bridge` ledger object. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to create the claim ID for. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,75 @@
---
html: xchainmodifybridge.html
parent: transaction-types.html
blurb: Modify the parameters of a bridge.
labels:
- Interoperability
status: not_enabled
---
# XChainModifyBridge
[[Source]](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/TxFormats.cpp#L390-L397 "Source")
_(Requires the [XChainBridge amendment][] :not_enabled:)_
The `XChainModifyBridge` transaction allows bridge managers to modify the parameters of the bridge. They can only change the `SignatureReward` and the `MinAccountCreateAmount`.
This transaction must be sent by the door account and requires the entities that control the witness servers to coordinate and provide the signatures for this transaction. This coordination happens outside the ledger.
**Note:** You can't modify the signer list for the bridge with this transaction. The signer list is on the door account itself and is changed in the same way signer lists are changed on accounts (via a `SignerListSet` transaction).
## Example XChainModifyBridge JSON
```json
{
"TransactionType": "XChainModifyBridge",
"Account": "rhWQzvdmhf5vFS35vtKUSUwNZHGT53qQsg",
"XChainBridge": {
"LockingChainDoor": "rhWQzvdmhf5vFS35vtKUSUwNZHGT53qQsg",
"LockingChainIssue": {
"currency": "XRP"
},
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {
"currency": "XRP"
}
},
"SignatureReward": 200,
"MinAccountCreateAmount": 1000000
}
```
## XChainModifyBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:-------------------------|:------------------|:------------------|:----------|-------------|
| `Flags` | `number` | `UINT32` | Yes | Specifies the flags for this transaction. |
| `MinAccountCreateAmount` | `Currency Amount` | `AMOUNT` | No | The minimum amount, in XRP, required for a `XChainAccountCreateCommit` transaction. If this is not present, the `XChainAccountCreateCommit` transaction will fail. This field can only be present on XRP-XRP bridges. |
| `SignatureReward` | `Currency Amount` | `AMOUNT` | No | The signature reward split between the witnesses for submitting attestations. |
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to modify. |
### XChainBridge Fields
| Field | JSON Type | Internal Type | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:----------------|
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
## Transaction Flags
In addition to the universal transaction flags that are applicable to all transactions, you can specify this flag:
| Flag Name | Flag Value | Description |
|------------------------------|--------------|-------------|
| `tfClearAccountCreateAmount` | `0x00010000` | Clears the `MinAccountCreateAmount` of the bridge. |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}