From 77199025f1dc4d70254addb07b6a777f9d5f0c1c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 11 Jul 2022 17:21:21 -0400 Subject: [PATCH 01/70] Update definitions.json --- .../src/enums/definitions.json | 180 +++++++++++++++++- 1 file changed, 179 insertions(+), 1 deletion(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 317e1feb..be000f9d 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -21,6 +21,10 @@ "UInt192": 21, "UInt384": 22, "UInt512": 23, + "Bridge": 24, + "XChainAttestations": 25, + "XChainAttestationBatch": 26, + "XChainClaimProof": 27, "Transaction": 10001, "LedgerEntry": 10002, "Validation": 10003, @@ -34,8 +38,10 @@ "Ticket": 84, "SignerList": 83, "Offer": 111, + "Bridge": 105, "LedgerHashes": 104, "Amendments": 102, + "XChainClaimID": 113, "FeeSettings": 115, "Escrow": 117, "PayChannel": 120, @@ -231,6 +237,16 @@ "type": "UInt8" } ], + [ + "WasLockingChainSend", + { + "nth": 19, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt8" + } + ], [ "LedgerEntryType", { @@ -931,6 +947,36 @@ "type": "UInt64" } ], + [ + "XChainClaimID", + { + "nth": 20, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "XChainAccountCreateCount", + { + "nth": 21, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "XChainAccountClaimCount", + { + "nth": 22, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], [ "EmailHash", { @@ -1421,6 +1467,36 @@ "type": "Amount" } ], + [ + "XChainFee", + { + "nth": 20, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "SignatureReward", + { + "nth": 21, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "MinAccountCreateAmount", + { + "nth": 22, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], [ "PublicKey", { @@ -1761,6 +1837,36 @@ "type": "AccountID" } ], + [ + "ThisChainAccount", + { + "nth": 17, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "OtherChainAccount", + { + "nth": 18, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "AttestationRewardAccount", + { + "nth": 19, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], [ "Indexes", { @@ -1811,6 +1917,36 @@ "type": "PathSet" } ], + [ + "Bridge", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Bridge" + } + ], + [ + "XChainClaimProof", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "XChainClaimProof" + } + ], + [ + "XChainAttestations", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "XChainAttestations" + } + ], [ "TransactionMetaData", { @@ -2021,6 +2157,16 @@ "type": "STObject" } ], + [ + "XChainProofSig", + { + "nth": 25, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], [ "Signers", { @@ -2160,6 +2306,16 @@ "isSigningField": true, "type": "STArray" } + ], + [ + "XChainProofSigs", + { + "nth": 21, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } ] ], "TRANSACTION_RESULTS": { @@ -2215,6 +2371,12 @@ "temUNKNOWN": -264, "temSEQ_AND_TICKET": -263, "temBAD_NFTOKEN_TRANSFER_FEE": -262, + "temEQUAL_DOOR_ACCOUNTS": -261, + "temBAD_XCHAIN_PROOF": -260, + "temSIDECHAIN_BAD_ISSUES": -259, + "temSIDECHAIN_NONDOOR_OWNER": -258, + "temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT": -257, + "temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT": -256, "tefFAILURE": -199, "tefALREADY": -198, @@ -2298,7 +2460,16 @@ "tecCANT_ACCEPT_OWN_NFTOKEN_OFFER": 158, "tecINSUFFICIENT_FUNDS": 159, "tecOBJECT_NOT_FOUND": 160, - "tecINSUFFICIENT_PAYMENT": 161 + "tecINSUFFICIENT_PAYMENT": 161, + "tecBAD_XCHAIN_TRANSFER_ISSUE": 162, + "tecBAD_XCHAIN_CLAIM_ID": 163, + "tecXCHAIN_CLAIM_NO_QUORUM": 164, + "tecXCHAIN_PROOF_UNKNOWN_KEY": 165, + "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 166, + "tecXCHAIN_CLAIM_ACCOUNT_DST_EXISTS": 167, + "tecXCHAIN_CLAIM_WRONG_CHAIN": 168, + "tecXCHAIN_REWARD_MISMATCH": 169, + "tecXCHAIN_NO_SIGNERS_LIST": 170 }, "TRANSACTION_TYPES": { "Invalid": -1, @@ -2330,6 +2501,13 @@ "NFTokenCreateOffer": 27, "NFTokenCancelOffer": 28, "NFTokenAcceptOffer": 29, + "XChainCreateBridge": 30, + "XChainCreateClaimID": 31, + "XChainCommit": 32, + "XChainClaim": 33, + "SidechainXChainAccountCreate": 34, + "SidechainXChainAccountClaim": 35, + "XChainAddAttestation": 36, "EnableAmendment": 100, "SetFee": 101, "UNLModify": 102 From 3a93f60aabeeef4b5170939b9b7c0b76918dc010 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 11 Jul 2022 17:23:41 -0400 Subject: [PATCH 02/70] add new st types --- .../ripple-binary-codec/src/types/bridge.ts | 109 +++++++++++++++++ .../ripple-binary-codec/src/types/index.ts | 4 + .../src/types/issued-currency.ts | 114 ++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 packages/ripple-binary-codec/src/types/bridge.ts create mode 100644 packages/ripple-binary-codec/src/types/issued-currency.ts diff --git a/packages/ripple-binary-codec/src/types/bridge.ts b/packages/ripple-binary-codec/src/types/bridge.ts new file mode 100644 index 00000000..80d401f0 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/bridge.ts @@ -0,0 +1,109 @@ +import { BinaryParser } from '../serdes/binary-parser' + +import { AccountID } from './account-id' +import { JsonObject, SerializedType } from './serialized-type' +import { Buffer } from 'buffer/' +import { IssuedCurrency, IssuedCurrencyObject } from './issued-currency' + +/** + * Interface for JSON objects that represent bridges + */ +interface BridgeObject extends JsonObject { + dst_chain_door: string + dst_chain_issue: IssuedCurrencyObject | string + src_chain_door: string + src_chain_issue: IssuedCurrencyObject | string +} + +/** + * Type guard for BridgeObject + */ +function isBridgeObject(arg): arg is BridgeObject { + const keys = Object.keys(arg).sort() + return ( + keys.length === 4 && + keys[0] === 'dst_chain_door' && + keys[1] === 'dst_chain_issue' && + keys[2] === 'src_chain_door' && + keys[3] === 'src_chain_issue' + ) +} + +/** + * Class for serializing/deserializing Bridges + */ +class Bridge extends SerializedType { + static readonly ZERO_Bridge: Bridge = new Bridge(Buffer.alloc(80)) + + static readonly TYPE_ORDER: { name: string; type: typeof SerializedType }[] = + [ + { name: 'src_chain_door', type: AccountID }, + { name: 'src_chain_issue', type: IssuedCurrency }, + { name: 'dst_chain_door', type: AccountID }, + { name: 'dst_chain_issue', type: IssuedCurrency }, + ] + + constructor(bytes: Buffer) { + super(bytes ?? Bridge.ZERO_Bridge.bytes) + } + + /** + * Construct a bridge from a JSON + * + * @param value Bridge or JSON to parse into a Bridge + * @returns A Bridge object + */ + static from(value: T): Bridge { + if (value instanceof Bridge) { + return value + } + + if (isBridgeObject(value)) { + const bytes: Array = [] + this.TYPE_ORDER.forEach((item) => { + const { name, type } = item + const object = type.from(value[name]) + bytes.push(object.toBytes()) + }) + return new Bridge(Buffer.concat(bytes)) + } + + throw new Error('Invalid type to construct a Bridge') + } + + /** + * Read a Bridge from a BinaryParser + * + * @param parser BinaryParser to read the Bridge from + * @returns A Bridge object + */ + static fromParser(parser: BinaryParser): Bridge { + const bytes: Array = [] + + this.TYPE_ORDER.forEach((item) => { + const { type } = item + const object = type.fromParser(parser) + bytes.push(object.toBytes()) + }) + + return new Bridge(Buffer.concat(bytes)) + } + + /** + * Get the JSON representation of this Bridge + * + * @returns the JSON interpretation of this.bytes + */ + toJSON(): BridgeObject { + const parser = new BinaryParser(this.toString()) + const json = {} + Bridge.TYPE_ORDER.forEach((item) => { + const { name, type } = item + const object = type.fromParser(parser).toJSON() + json[name] = object + }) + return json as BridgeObject + } +} + +export { Bridge, BridgeObject } diff --git a/packages/ripple-binary-codec/src/types/index.ts b/packages/ripple-binary-codec/src/types/index.ts index 5efa199a..f266eca6 100644 --- a/packages/ripple-binary-codec/src/types/index.ts +++ b/packages/ripple-binary-codec/src/types/index.ts @@ -7,10 +7,12 @@ import { import { AccountID } from './account-id' import { Amount } from './amount' import { Blob } from './blob' +import { Bridge } from './bridge' import { Currency } from './currency' import { Hash128 } from './hash-128' import { Hash160 } from './hash-160' import { Hash256 } from './hash-256' +import { IssuedCurrency } from './issued-currency' import { PathSet } from './path-set' import { STArray } from './st-array' import { STObject } from './st-object' @@ -24,10 +26,12 @@ const coreTypes = { AccountID, Amount, Blob, + Bridge, Currency, Hash128, Hash160, Hash256, + IssuedCurrency, PathSet, STArray, STObject, diff --git a/packages/ripple-binary-codec/src/types/issued-currency.ts b/packages/ripple-binary-codec/src/types/issued-currency.ts new file mode 100644 index 00000000..b4419224 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/issued-currency.ts @@ -0,0 +1,114 @@ +import { BinaryParser } from '../serdes/binary-parser' + +import { AccountID } from './account-id' +import { Currency } from './currency' +import { JsonObject, SerializedType } from './serialized-type' +import { Buffer } from 'buffer/' + +/** + * Interface for JSON objects that represent amounts + */ +interface IssuedCurrencyObject extends JsonObject { + currency: string + issuer: string +} + +/** + * Type guard for AmountObject + */ +function isIssuedCurrencyObject(arg): arg is IssuedCurrencyObject { + const keys = Object.keys(arg).sort() + return keys.length === 2 && keys[0] === 'currency' && keys[1] === 'issuer' +} + +/** + * Class for serializing/Deserializing Amounts + */ +class IssuedCurrency extends SerializedType { + static readonly ZERO_ISSUED_CURRENCY: IssuedCurrency = new IssuedCurrency( + Buffer.alloc(20), + ) + + constructor(bytes: Buffer) { + super(bytes ?? IssuedCurrency.ZERO_ISSUED_CURRENCY.bytes) + } + + /** + * Construct an amount from an IOU or string amount + * + * @param value An Amount, object representing an IOU, or a string + * representing an integer amount + * @returns An Amount object + */ + static from( + value: T, + ): IssuedCurrency { + if (value instanceof IssuedCurrency) { + return value + } + + if (typeof value === 'string') { + IssuedCurrency.assertXrpIsValid(value) + + const currency = Currency.from(value).toBytes() + + return new IssuedCurrency(currency) + } + + if (isIssuedCurrencyObject(value)) { + const currency = Currency.from(value.currency).toBytes() + const issuer = AccountID.from(value.issuer).toBytes() + return new IssuedCurrency(Buffer.concat([currency, issuer])) + } + + throw new Error('Invalid type to construct an Amount') + } + + /** + * Read an amount from a BinaryParser + * + * @param parser BinaryParser to read the Amount from + * @returns An Amount object + */ + static fromParser(parser: BinaryParser): IssuedCurrency { + const currency = parser.read(20) + if (new Currency(currency).toJSON() === 'XRP') { + return new IssuedCurrency(currency) + } + const currencyAndIssuer = [currency, parser.read(20)] + return new IssuedCurrency(Buffer.concat(currencyAndIssuer)) + } + + /** + * Get the JSON representation of this Amount + * + * @returns the JSON interpretation of this.bytes + */ + toJSON(): IssuedCurrencyObject | string { + const parser = new BinaryParser(this.toString()) + const currency = Currency.fromParser(parser) as Currency + if (currency.toJSON() === 'XRP') { + return currency.toJSON() + } + const issuer = AccountID.fromParser(parser) as AccountID + + return { + currency: currency.toJSON(), + issuer: issuer.toJSON(), + } + } + + /** + * Validate XRP amount + * + * @param value String representing XRP amount + * @returns void, but will throw if invalid amount + */ + private static assertXrpIsValid(value: string): void { + if (value !== 'XRP') { + throw new Error(`${value} is an illegal amount`) + } + } +} + +export { IssuedCurrency, IssuedCurrencyObject } From 0286b81745e13407c76b4deb7536541ad4533726 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 11 Jul 2022 17:35:45 -0400 Subject: [PATCH 03/70] add tests --- packages/ripple-binary-codec/package.json | 4 +- .../test/fixtures/codec-fixtures.json | 111 +++++++++++++++--- 2 files changed, 99 insertions(+), 16 deletions(-) diff --git a/packages/ripple-binary-codec/package.json b/packages/ripple-binary-codec/package.json index 0d656a39..c12fdc5e 100644 --- a/packages/ripple-binary-codec/package.json +++ b/packages/ripple-binary-codec/package.json @@ -22,8 +22,8 @@ "scripts": { "build": "tsc -b && copyfiles ./src/enums/definitions.json ./dist/enums/", "clean": "rm -rf ./dist && rm -rf tsconfig.tsbuildinfo", - "prepare": "npm run build && npm test", - "test": "jest", + "prepare": "npm test", + "test": "npm run build && jest", "lint": "eslint . --ext .ts --ext .test.js" }, "repository": { diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 15aa20f1..d12e8eae 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4435,20 +4435,103 @@ } } ], - "transactions": [{ - "binary": "1200002200000000240000003E6140000002540BE40068400000000000000A7321034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E74473045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F17962646398114550FC62003E785DC231A1058A05E56E3F09CF4E68314D4CC8AB5B21D86A82C3E9E8D0ECF2404B77FECBA", - "json": { - "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "Destination": "rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj", - "TransactionType": "Payment", - "TxnSignature": "3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639", - "SigningPubKey": "034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E", - "Amount": "10000000000", - "Fee": "10", - "Flags": 0, - "Sequence": 62 + "transactions": [ + { + "binary": "1200002200000000240000003E6140000002540BE40068400000000000000A7321034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E74473045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F17962646398114550FC62003E785DC231A1058A05E56E3F09CF4E68314D4CC8AB5B21D86A82C3E9E8D0ECF2404B77FECBA", + "json": { + "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Destination": "rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj", + "TransactionType": "Payment", + "TxnSignature": "3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639", + "SigningPubKey": "034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E", + "Amount": "10000000000", + "Fee": "10", + "Flags": 0, + "Sequence": 62 + } + }, + { + "binary": "12001E2280000000240000000168400000000000000A601540000000000003E86016400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220432A94FC7F759730DD66CC7FB0044E563E6C0DF28C3CDF673CB1D2DF03862FA5022020F70FCF14FF24080E34FA5CA0F555C83A520FC4730F5EDA82523FB0E145E2DA8114AF80285F637EE4AF3C20378F9DFB12511ACB8D270118AF80285F637EE4AF3C20378F9DFB12511ACB8D270000000000000000000000000000000000000000550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "json": { + "Account": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "Bridge": { + "src_chain_door": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "src_chain_issue": "XRP", + "dst_chain_door": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "dst_chain_issue": "XRP" + }, + "Fee": "10", + "Flags": 2147483648, + "MinAccountCreateAmount": "10000", + "Sequence": 1, + "SignatureReward": "1000", + "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType": "XChainCreateBridge", + "TxnSignature": "30440220432A94FC7F759730DD66CC7FB0044E563E6C0DF28C3CDF673CB1D2DF03862FA5022020F70FCF14FF24080E34FA5CA0F555C83A520FC4730F5EDA82523FB0E145E2DA" + } + }, + { + "binary": "12001F2280000000240000000168400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074463044022065BB8ABE6E34ADB25C1350F7AF34B1DF01CE87A5ACE1610454EE6B2ED70A0D3302201A4CC9664A191E70F98E921E569E7D3D2EF7FC28353085BC8CBA5296425C287E8114550FC62003E785DC231A1058A05E56E3F09CF4E6801214AF80285F637EE4AF3C20378F9DFB12511ACB8D270118AF80285F637EE4AF3C20378F9DFB12511ACB8D270000000000000000000000000000000000000000550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "json": { + "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Bridge": { + "src_chain_door": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "src_chain_issue": "XRP", + "dst_chain_door": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "dst_chain_issue": "XRP" + }, + "Fee": "10", + "Flags": 2147483648, + "OtherChainAccount": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "Sequence": 1, + "SignatureReward": "10000", + "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType": "XChainCreateClaimID", + "TxnSignature": "3044022065BB8ABE6E34ADB25C1350F7AF34B1DF01CE87A5ACE1610454EE6B2ED70A0D3302201A4CC9664A191E70F98E921E569E7D3D2EF7FC28353085BC8CBA5296425C287E" + } + }, + { + "binary": "120020228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402204C1E4F103CB24B10925F34DF2A90AD3008078A0A725A1F96A59652E34EF5071B02200F567E95FF140F12A35CDBD2324F8BE769BF57DE5D2F92367A4C8AAB7C5F34548114550FC62003E785DC231A1058A05E56E3F09CF4E60118AF80285F637EE4AF3C20378F9DFB12511ACB8D270000000000000000000000000000000000000000550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "json": { + "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Amount": "10000", + "Bridge": { + "src_chain_door": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "src_chain_issue": "XRP", + "dst_chain_door": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "dst_chain_issue": "XRP" + }, + "Fee": "10", + "Flags": 2147483648, + "Sequence": 1, + "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType": "XChainCommit", + "TxnSignature": "304402204C1E4F103CB24B10925F34DF2A90AD3008078A0A725A1F96A59652E34EF5071B02200F567E95FF140F12A35CDBD2324F8BE769BF57DE5D2F92367A4C8AAB7C5F3454", + "XChainClaimID": "0000000000000001" + } + }, + { + "binary": "120021228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D4AFE8A4ACED40969B3E06EEC1D3C94FB9B6702537CC56FB180BA2F74E9CCB5C02203B30C46AB83B665BD3B4FF6AB3CBF33C138640CB7CA76888BB7280B114FC94458114550FC62003E785DC231A1058A05E56E3F09CF4E68314550FC62003E785DC231A1058A05E56E3F09CF4E60118AF80285F637EE4AF3C20378F9DFB12511ACB8D270000000000000000000000000000000000000000550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "json": { + "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Amount": "10000", + "Bridge": { + "src_chain_door": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "src_chain_issue": "XRP", + "dst_chain_door": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "dst_chain_issue": "XRP" + }, + "Destination": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Fee": "10", + "Flags": 2147483648, + "Sequence": 1, + "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType": "XChainClaim", + "TxnSignature": "3045022100D4AFE8A4ACED40969B3E06EEC1D3C94FB9B6702537CC56FB180BA2F74E9CCB5C02203B30C46AB83B665BD3B4FF6AB3CBF33C138640CB7CA76888BB7280B114FC9445", + "XChainClaimID": "0000000000000001" + } } - }], + ], "ledgerData": [{ "binary": "01E91435016340767BF1C4A3EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F873B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D521276CDE21276CE60A00", "json": { @@ -4463,4 +4546,4 @@ "transaction_hash": "DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F87" } }] -} \ No newline at end of file +} From 9d5840037361776a80baaec427082b18f8ade518 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 12 Jul 2022 11:00:50 -0400 Subject: [PATCH 04/70] add XChainClaim tx --- packages/xrpl/src/models/common/index.ts | 7 +++ .../src/models/transactions/XChainClaim.ts | 46 +++++++++++++++++++ .../xrpl/src/models/transactions/index.ts | 1 + .../src/models/transactions/transaction.ts | 6 +++ 4 files changed, 60 insertions(+) create mode 100644 packages/xrpl/src/models/transactions/XChainClaim.ts diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index 26625c74..0ded2760 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -124,3 +124,10 @@ export interface NFTOffer { destination?: string expiration?: number } + +export interface Bridge { + src_chain_door: string + src_chain_issue: 'XRP' | IssuedCurrency + dst_chain_door: string + dst_chain_issue: 'XRP' | IssuedCurrency +} diff --git a/packages/xrpl/src/models/transactions/XChainClaim.ts b/packages/xrpl/src/models/transactions/XChainClaim.ts new file mode 100644 index 00000000..b64322f7 --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainClaim.ts @@ -0,0 +1,46 @@ +import { ValidationError } from '../../errors' +import { Amount, Bridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainClaim extends BaseTransaction { + TransactionType: 'XChainClaim' + + Bridge: Bridge + + XChainClaimID: number | string + + Destination: string + + Amount: Amount +} + +/** + * Verify the form and type of a XChainClaim at runtime. + * + * @param tx - A XChainClaim Transaction. + * @throws When the XChainClaim is malformed. + */ +export function validateXChainClaim(tx: Record): void { + validateBaseTransaction(tx) + + if (tx.Bridge == null) { + throw new ValidationError('XChainClaim: missing field Bridge') + } + + if (tx.XChainClaimID == null) { + throw new ValidationError('XChainClaim: missing field XChainClaimID') + } + + if (tx.Destination == null) { + throw new ValidationError('XChainClaim: missing field Destination') + } + + if (tx.Amount == null) { + throw new ValidationError('XChainClaim: missing field Amount') + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 49944424..526046c7 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -45,3 +45,4 @@ export { SetRegularKey } from './setRegularKey' export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' +export { XChainClaim } from './XChainClaim' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index e5a26b8f..94e48a94 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -50,6 +50,7 @@ import { SetRegularKey, validateSetRegularKey } from './setRegularKey' import { SignerListSet, validateSignerListSet } from './signerListSet' import { TicketCreate, validateTicketCreate } from './ticketCreate' import { TrustSet, validateTrustSet } from './trustSet' +import { XChainClaim, validateXChainClaim } from './XChainClaim' /** * @category Transaction Models @@ -79,6 +80,7 @@ export type Transaction = | SignerListSet | TicketCreate | TrustSet + | XChainClaim /** * @category Transaction Models @@ -203,6 +205,10 @@ export function validate(transaction: Record): void { validateTrustSet(tx) break + case 'XChainClaim': + validateXChainClaim(tx) + break + default: throw new ValidationError( `Invalid field TransactionType: ${tx.TransactionType}`, From 29282298d62fdb51a8465d5413b209cf3ad5693c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 12 Jul 2022 11:04:45 -0400 Subject: [PATCH 05/70] add XChainCommit tx --- .../src/models/transactions/XChainCommit.ts | 40 +++++++++++++++++++ .../xrpl/src/models/transactions/index.ts | 1 + .../src/models/transactions/transaction.ts | 6 +++ 3 files changed, 47 insertions(+) create mode 100644 packages/xrpl/src/models/transactions/XChainCommit.ts diff --git a/packages/xrpl/src/models/transactions/XChainCommit.ts b/packages/xrpl/src/models/transactions/XChainCommit.ts new file mode 100644 index 00000000..f105b8c6 --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainCommit.ts @@ -0,0 +1,40 @@ +import { ValidationError } from '../../errors' +import { Amount, Bridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainCommit extends BaseTransaction { + TransactionType: 'XChainCommit' + + Bridge: Bridge + + XChainClaimID: number | string + + Amount: Amount +} + +/** + * Verify the form and type of a XChainCommit at runtime. + * + * @param tx - A XChainCommit Transaction. + * @throws When the XChainCommit is malformed. + */ +export function validateXChainCommit(tx: Record): void { + validateBaseTransaction(tx) + + if (tx.Bridge == null) { + throw new ValidationError('XChainCommit: missing field Bridge') + } + + if (tx.XChainCommitID == null) { + throw new ValidationError('XChainCommit: missing field XChainCommitID') + } + + if (tx.Amount == null) { + throw new ValidationError('XChainCommit: missing field Amount') + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 526046c7..ae5fd8d9 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -46,3 +46,4 @@ export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' export { XChainClaim } from './XChainClaim' +export { XChainCommit } from './XChainCommit' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 94e48a94..c864c267 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -51,6 +51,7 @@ import { SignerListSet, validateSignerListSet } from './signerListSet' import { TicketCreate, validateTicketCreate } from './ticketCreate' import { TrustSet, validateTrustSet } from './trustSet' import { XChainClaim, validateXChainClaim } from './XChainClaim' +import { XChainCommit, validateXChainCommit } from './XChainCommit' /** * @category Transaction Models @@ -81,6 +82,7 @@ export type Transaction = | TicketCreate | TrustSet | XChainClaim + | XChainCommit /** * @category Transaction Models @@ -209,6 +211,10 @@ export function validate(transaction: Record): void { validateXChainClaim(tx) break + case 'XChainCommit': + validateXChainCommit(tx) + break + default: throw new ValidationError( `Invalid field TransactionType: ${tx.TransactionType}`, From caddad737ca30d3fa2f7509c9ac04950bd6d2e20 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 12 Jul 2022 11:08:13 -0400 Subject: [PATCH 06/70] add XChainCreateBridge tx --- .../src/models/transactions/XChainCommit.ts | 2 +- .../models/transactions/XChainCreateBridge.ts | 38 +++++++++++++++++++ .../xrpl/src/models/transactions/index.ts | 1 + .../src/models/transactions/transaction.ts | 9 +++++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 packages/xrpl/src/models/transactions/XChainCreateBridge.ts diff --git a/packages/xrpl/src/models/transactions/XChainCommit.ts b/packages/xrpl/src/models/transactions/XChainCommit.ts index f105b8c6..87afcd84 100644 --- a/packages/xrpl/src/models/transactions/XChainCommit.ts +++ b/packages/xrpl/src/models/transactions/XChainCommit.ts @@ -31,7 +31,7 @@ export function validateXChainCommit(tx: Record): void { } if (tx.XChainCommitID == null) { - throw new ValidationError('XChainCommit: missing field XChainCommitID') + throw new ValidationError('XChainCommit: missing field XChainClaimID') } if (tx.Amount == null) { diff --git a/packages/xrpl/src/models/transactions/XChainCreateBridge.ts b/packages/xrpl/src/models/transactions/XChainCreateBridge.ts new file mode 100644 index 00000000..1ba45d54 --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainCreateBridge.ts @@ -0,0 +1,38 @@ +import { ValidationError } from '../../errors' +import { Amount, Bridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainCreateBridge extends BaseTransaction { + TransactionType: 'XChainCreateBridge' + + Bridge: Bridge + + SignatureReward: Amount + + MinAccountCreateAmount?: Amount +} + +/** + * Verify the form and type of a XChainCreateBridge at runtime. + * + * @param tx - A XChainCreateBridge Transaction. + * @throws When the XChainCreateBridge is malformed. + */ +export function validateXChainCreateBridge(tx: Record): void { + validateBaseTransaction(tx) + + if (tx.Bridge == null) { + throw new ValidationError('XChainCreateBridge: missing field Bridge') + } + + if (tx.SignatureReward == null) { + throw new ValidationError( + 'XChainCreateBridge: missing field SignatureReward', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index ae5fd8d9..2206068a 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -47,3 +47,4 @@ export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' export { XChainClaim } from './XChainClaim' export { XChainCommit } from './XChainCommit' +export { XChainCreateBridge } from './XChainCreateBridge' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index c864c267..4bc19204 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -52,6 +52,10 @@ import { TicketCreate, validateTicketCreate } from './ticketCreate' import { TrustSet, validateTrustSet } from './trustSet' import { XChainClaim, validateXChainClaim } from './XChainClaim' import { XChainCommit, validateXChainCommit } from './XChainCommit' +import { + XChainCreateBridge, + validateXChainCreateBridge, +} from './XChainCreateBridge' /** * @category Transaction Models @@ -83,6 +87,7 @@ export type Transaction = | TrustSet | XChainClaim | XChainCommit + | XChainCreateBridge /** * @category Transaction Models @@ -215,6 +220,10 @@ export function validate(transaction: Record): void { validateXChainCommit(tx) break + case 'XChainCreateBridge': + validateXChainCreateBridge(tx) + break + default: throw new ValidationError( `Invalid field TransactionType: ${tx.TransactionType}`, From 277725858d36d98eb3235e4a62b44525df2e0f14 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 12 Jul 2022 11:11:18 -0400 Subject: [PATCH 07/70] add XChainCreateClaimID tx --- .../transactions/XChainCreateClaimID.ts | 44 +++++++++++++++++++ .../xrpl/src/models/transactions/index.ts | 1 + .../src/models/transactions/transaction.ts | 9 ++++ 3 files changed, 54 insertions(+) create mode 100644 packages/xrpl/src/models/transactions/XChainCreateClaimID.ts diff --git a/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts b/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts new file mode 100644 index 00000000..341674ed --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts @@ -0,0 +1,44 @@ +import { ValidationError } from '../../errors' +import { Amount, Bridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainCreateClaimID extends BaseTransaction { + TransactionType: 'XChainCreateClaimID' + + Bridge: Bridge + + SignatureReward: Amount + + OtherChainAccount: string +} + +/** + * Verify the form and type of a XChainCreateClaimID at runtime. + * + * @param tx - A XChainCreateClaimID Transaction. + * @throws When the XChainCreateClaimID is malformed. + */ +export function validateXChainCreateClaimID(tx: Record): void { + validateBaseTransaction(tx) + + if (tx.Bridge == null) { + throw new ValidationError('XChainCreateClaimID: missing field Bridge') + } + + if (tx.SignatureReward == null) { + throw new ValidationError( + 'XChainCreateClaimID: missing field SignatureReward', + ) + } + + if (tx.OtherChainAccount == null) { + throw new ValidationError( + 'XChainCreateClaimID: missing field OtherChainAccount', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 2206068a..15225c7c 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -48,3 +48,4 @@ export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' export { XChainClaim } from './XChainClaim' export { XChainCommit } from './XChainCommit' export { XChainCreateBridge } from './XChainCreateBridge' +export { XChainCreateClaimID } from './XChainCreateClaimID' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 4bc19204..35479866 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -56,6 +56,10 @@ import { XChainCreateBridge, validateXChainCreateBridge, } from './XChainCreateBridge' +import { + XChainCreateClaimID, + validateXChainCreateClaimID, +} from './XChainCreateClaimID' /** * @category Transaction Models @@ -88,6 +92,7 @@ export type Transaction = | XChainClaim | XChainCommit | XChainCreateBridge + | XChainCreateClaimID /** * @category Transaction Models @@ -224,6 +229,10 @@ export function validate(transaction: Record): void { validateXChainCreateBridge(tx) break + case 'XChainCreateClaimID': + validateXChainCreateClaimID(tx) + break + default: throw new ValidationError( `Invalid field TransactionType: ${tx.TransactionType}`, From 901a0e62e231432201c208af05dd78b6f6a8c7a0 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 19 Jul 2022 10:13:08 +0100 Subject: [PATCH 08/70] update definitions.json --- .../src/enums/definitions.json | 180 +++++++++++++++--- 1 file changed, 157 insertions(+), 23 deletions(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index be000f9d..02ebd23d 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -21,10 +21,11 @@ "UInt192": 21, "UInt384": 22, "UInt512": 23, - "Bridge": 24, - "XChainAttestations": 25, - "XChainAttestationBatch": 26, - "XChainClaimProof": 27, + "XChainAttestations": 24, + "XChainClaimProof": 25, + "Issue": 26, + "XChainBridge": 27, + "XChainAttestationBatch": 28, "Transaction": 10001, "LedgerEntry": 10002, "Validation": 10003, @@ -1858,7 +1859,7 @@ } ], [ - "AttestationRewardAccount", + "AttestationSignerAccount", { "nth": 19, "isVLEncoded": true, @@ -1867,6 +1868,36 @@ "type": "AccountID" } ], + [ + "AttestationRewardAccount", + { + "nth": 20, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "LockingChainDoor", + { + "nth": 21, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "IssuingChainDoor", + { + "nth": 22, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], [ "Indexes", { @@ -1917,16 +1948,6 @@ "type": "PathSet" } ], - [ - "Bridge", - { - "nth": 1, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "Bridge" - } - ], [ "XChainClaimProof", { @@ -1947,6 +1968,46 @@ "type": "XChainAttestations" } ], + [ + "LockingChainIssue", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Issue" + } + ], + [ + "IssuingChainIssue", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Issue" + } + ], + [ + "XChainBridge", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "XChainBridge" + } + ], + [ + "XChainAttestationBatch", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "XChainAttestationBatch" + } + ], [ "TransactionMetaData", { @@ -2167,6 +2228,56 @@ "type": "STObject" } ], + [ + "XChainAttestationSigs", + { + "nth": 26, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "XChainAttestationBatchElement", + { + "nth": 27, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "XChainClaimAttestationBatchElement", + { + "nth": 28, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "XChainCreateAccountAttestationBatchElement", + { + "nth": 29, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "XChainAttestationBatchInner", + { + "nth": 30, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], [ "Signers", { @@ -2316,6 +2427,26 @@ "isSigningField": true, "type": "STArray" } + ], + [ + "XChainClaimAttestationBatch", + { + "nth": 22, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "XChainCreateAccountAttestationBatch", + { + "nth": 23, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } ] ], "TRANSACTION_RESULTS": { @@ -2377,6 +2508,7 @@ "temSIDECHAIN_NONDOOR_OWNER": -258, "temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT": -257, "temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT": -256, + "temXCHAIN_TOO_MANY_ATTESTATIONS": -255, "tefFAILURE": -199, "tefALREADY": -198, @@ -2462,14 +2594,16 @@ "tecOBJECT_NOT_FOUND": 160, "tecINSUFFICIENT_PAYMENT": 161, "tecBAD_XCHAIN_TRANSFER_ISSUE": 162, - "tecBAD_XCHAIN_CLAIM_ID": 163, - "tecXCHAIN_CLAIM_NO_QUORUM": 164, - "tecXCHAIN_PROOF_UNKNOWN_KEY": 165, - "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 166, - "tecXCHAIN_CLAIM_ACCOUNT_DST_EXISTS": 167, - "tecXCHAIN_CLAIM_WRONG_CHAIN": 168, - "tecXCHAIN_REWARD_MISMATCH": 169, - "tecXCHAIN_NO_SIGNERS_LIST": 170 + "tecXCHAIN_NO_CLAIM_ID": 163, + "tecXCHAIN_BAD_CLAIM_ID": 164, + "tecXCHAIN_CLAIM_NO_QUORUM": 165, + "tecXCHAIN_PROOF_UNKNOWN_KEY": 166, + "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 167, + "tecXCHAIN_CLAIM_ACCOUNT_DST_EXISTS": 168, + "tecXCHAIN_CLAIM_WRONG_CHAIN": 169, + "tecXCHAIN_REWARD_MISMATCH": 170, + "tecXCHAIN_NO_SIGNERS_LIST": 171, + "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 172 }, "TRANSACTION_TYPES": { "Invalid": -1, From 6508d048bf24ba561957da8ef2bfa56d6ac9980f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 19 Jul 2022 10:42:42 +0100 Subject: [PATCH 09/70] rename Bridge -> XChainBridge in binary codec, fix tests --- .../src/serdes/binary-parser.ts | 2 +- .../ripple-binary-codec/src/types/bridge.ts | 109 --------------- .../ripple-binary-codec/src/types/index.ts | 4 +- .../src/types/xchain-bridge.ts | 128 ++++++++++++++++++ .../test/fixtures/codec-fixtures.json | 58 ++++---- 5 files changed, 160 insertions(+), 141 deletions(-) delete mode 100644 packages/ripple-binary-codec/src/types/bridge.ts create mode 100644 packages/ripple-binary-codec/src/types/xchain-bridge.ts diff --git a/packages/ripple-binary-codec/src/serdes/binary-parser.ts b/packages/ripple-binary-codec/src/serdes/binary-parser.ts index 534ef52f..52f0d650 100644 --- a/packages/ripple-binary-codec/src/serdes/binary-parser.ts +++ b/packages/ripple-binary-codec/src/serdes/binary-parser.ts @@ -7,7 +7,7 @@ import { Buffer } from 'buffer/' * BinaryParser is used to compute fields and values from a HexString */ class BinaryParser { - private bytes: Buffer + public bytes: Buffer /** * Initialize bytes to a hex string diff --git a/packages/ripple-binary-codec/src/types/bridge.ts b/packages/ripple-binary-codec/src/types/bridge.ts deleted file mode 100644 index 80d401f0..00000000 --- a/packages/ripple-binary-codec/src/types/bridge.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { BinaryParser } from '../serdes/binary-parser' - -import { AccountID } from './account-id' -import { JsonObject, SerializedType } from './serialized-type' -import { Buffer } from 'buffer/' -import { IssuedCurrency, IssuedCurrencyObject } from './issued-currency' - -/** - * Interface for JSON objects that represent bridges - */ -interface BridgeObject extends JsonObject { - dst_chain_door: string - dst_chain_issue: IssuedCurrencyObject | string - src_chain_door: string - src_chain_issue: IssuedCurrencyObject | string -} - -/** - * Type guard for BridgeObject - */ -function isBridgeObject(arg): arg is BridgeObject { - const keys = Object.keys(arg).sort() - return ( - keys.length === 4 && - keys[0] === 'dst_chain_door' && - keys[1] === 'dst_chain_issue' && - keys[2] === 'src_chain_door' && - keys[3] === 'src_chain_issue' - ) -} - -/** - * Class for serializing/deserializing Bridges - */ -class Bridge extends SerializedType { - static readonly ZERO_Bridge: Bridge = new Bridge(Buffer.alloc(80)) - - static readonly TYPE_ORDER: { name: string; type: typeof SerializedType }[] = - [ - { name: 'src_chain_door', type: AccountID }, - { name: 'src_chain_issue', type: IssuedCurrency }, - { name: 'dst_chain_door', type: AccountID }, - { name: 'dst_chain_issue', type: IssuedCurrency }, - ] - - constructor(bytes: Buffer) { - super(bytes ?? Bridge.ZERO_Bridge.bytes) - } - - /** - * Construct a bridge from a JSON - * - * @param value Bridge or JSON to parse into a Bridge - * @returns A Bridge object - */ - static from(value: T): Bridge { - if (value instanceof Bridge) { - return value - } - - if (isBridgeObject(value)) { - const bytes: Array = [] - this.TYPE_ORDER.forEach((item) => { - const { name, type } = item - const object = type.from(value[name]) - bytes.push(object.toBytes()) - }) - return new Bridge(Buffer.concat(bytes)) - } - - throw new Error('Invalid type to construct a Bridge') - } - - /** - * Read a Bridge from a BinaryParser - * - * @param parser BinaryParser to read the Bridge from - * @returns A Bridge object - */ - static fromParser(parser: BinaryParser): Bridge { - const bytes: Array = [] - - this.TYPE_ORDER.forEach((item) => { - const { type } = item - const object = type.fromParser(parser) - bytes.push(object.toBytes()) - }) - - return new Bridge(Buffer.concat(bytes)) - } - - /** - * Get the JSON representation of this Bridge - * - * @returns the JSON interpretation of this.bytes - */ - toJSON(): BridgeObject { - const parser = new BinaryParser(this.toString()) - const json = {} - Bridge.TYPE_ORDER.forEach((item) => { - const { name, type } = item - const object = type.fromParser(parser).toJSON() - json[name] = object - }) - return json as BridgeObject - } -} - -export { Bridge, BridgeObject } diff --git a/packages/ripple-binary-codec/src/types/index.ts b/packages/ripple-binary-codec/src/types/index.ts index f266eca6..60f4ac79 100644 --- a/packages/ripple-binary-codec/src/types/index.ts +++ b/packages/ripple-binary-codec/src/types/index.ts @@ -7,7 +7,7 @@ import { import { AccountID } from './account-id' import { Amount } from './amount' import { Blob } from './blob' -import { Bridge } from './bridge' +import { XChainBridge } from './xchain-bridge' import { Currency } from './currency' import { Hash128 } from './hash-128' import { Hash160 } from './hash-160' @@ -26,7 +26,7 @@ const coreTypes = { AccountID, Amount, Blob, - Bridge, + XChainBridge, Currency, Hash128, Hash160, diff --git a/packages/ripple-binary-codec/src/types/xchain-bridge.ts b/packages/ripple-binary-codec/src/types/xchain-bridge.ts new file mode 100644 index 00000000..ce4dc258 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/xchain-bridge.ts @@ -0,0 +1,128 @@ +import { BinaryParser } from '../serdes/binary-parser' + +import { AccountID } from './account-id' +import { JsonObject, SerializedType } from './serialized-type' +import { Buffer } from 'buffer/' +import { IssuedCurrency, IssuedCurrencyObject } from './issued-currency' + +/** + * Interface for JSON objects that represent cross-chain bridges + */ +interface XChainBridgeObject extends JsonObject { + dst_chain_door: string + dst_chain_issue: IssuedCurrencyObject | string + src_chain_door: string + src_chain_issue: IssuedCurrencyObject | string +} + +/** + * Type guard for XChainBridgeObject + */ +function isXChainBridgeObject(arg): arg is XChainBridgeObject { + const keys = Object.keys(arg).sort() + return ( + keys.length === 4 && + keys[0] === 'IssuingChainDoor' && + keys[1] === 'IssuingChainIssue' && + keys[2] === 'LockingChainDoor' && + keys[3] === 'LockingChainIssue' + ) +} + +/** + * Class for serializing/deserializing XChainBridges + */ +class XChainBridge extends SerializedType { + static readonly ZERO_XCHAIN_BRIDGE: XChainBridge = new XChainBridge( + Buffer.concat([ + Buffer.from([0x14]), + Buffer.alloc(40), + Buffer.from([0x14]), + Buffer.alloc(40), + ]), + ) + + static readonly TYPE_ORDER: { name: string; type: typeof SerializedType }[] = + [ + { name: 'LockingChainDoor', type: AccountID }, + { name: 'LockingChainIssue', type: IssuedCurrency }, + { name: 'IssuingChainDoor', type: AccountID }, + { name: 'IssuingChainIssue', type: IssuedCurrency }, + ] + + constructor(bytes: Buffer) { + super(bytes ?? XChainBridge.ZERO_XCHAIN_BRIDGE.bytes) + } + + /** + * Construct a cross-chain bridge from a JSON + * + * @param value XChainBridge or JSON to parse into a XChainBridge + * @returns A XChainBridge object + */ + static from( + value: T, + ): XChainBridge { + if (value instanceof XChainBridge) { + return value + } + + if (isXChainBridgeObject(value)) { + const bytes: Array = [] + this.TYPE_ORDER.forEach((item) => { + const { name, type } = item + if (type === AccountID) { + bytes.push(Buffer.from([0x14])) + } + const object = type.from(value[name]) + bytes.push(object.toBytes()) + }) + return new XChainBridge(Buffer.concat(bytes)) + } + + throw new Error('Invalid type to construct a XChainBridge') + } + + /** + * Read a XChainBridge from a BinaryParser + * + * @param parser BinaryParser to read the XChainBridge from + * @returns A XChainBridge object + */ + static fromParser(parser: BinaryParser): XChainBridge { + const bytes: Array = [] + + this.TYPE_ORDER.forEach((item) => { + const { type } = item + if (type === AccountID) { + parser.skip(1) + bytes.push(Buffer.from([0x14])) + } + const object = type.fromParser(parser) + bytes.push(object.toBytes()) + }) + + return new XChainBridge(Buffer.concat(bytes)) + } + + /** + * Get the JSON representation of this XChainBridge + * + * @returns the JSON interpretation of this.bytes + */ + toJSON(): XChainBridgeObject { + const parser = new BinaryParser(this.toString()) + const json = {} + XChainBridge.TYPE_ORDER.forEach((item) => { + const { name, type } = item + if (type === AccountID) { + parser.skip(1) + } + const object = type.fromParser(parser).toJSON() + json[name] = object + }) + return json as XChainBridgeObject + } +} + +export { XChainBridge, XChainBridgeObject } diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index d12e8eae..006fe5b2 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4451,34 +4451,34 @@ } }, { - "binary": "12001E2280000000240000000168400000000000000A601540000000000003E86016400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220432A94FC7F759730DD66CC7FB0044E563E6C0DF28C3CDF673CB1D2DF03862FA5022020F70FCF14FF24080E34FA5CA0F555C83A520FC4730F5EDA82523FB0E145E2DA8114AF80285F637EE4AF3C20378F9DFB12511ACB8D270118AF80285F637EE4AF3C20378F9DFB12511ACB8D270000000000000000000000000000000000000000550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12001E2200000000240000000168400000000000000A601540000000000003E86016400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074463044022044798D0E4310C7E79B2929308E765F0C29B2D2A1DB4FDF0D7A62DAB39A4874F402207DC871A0E0049078ECB98EAD1E0B78DAD17F4E3E6DF4AB2E5F6DAC9451A5630A8114AF80285F637EE4AF3C20378F9DFB12511ACB8D27011B14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "Bridge": { - "src_chain_door": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "src_chain_issue": "XRP", - "dst_chain_door": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "dst_chain_issue": "XRP" + "XChainBridge": { + "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "LockingChainIssue": "XRP", + "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "IssuingChainIssue": "XRP" }, "Fee": "10", - "Flags": 2147483648, + "Flags": 0, "MinAccountCreateAmount": "10000", "Sequence": 1, "SignatureReward": "1000", "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType": "XChainCreateBridge", - "TxnSignature": "30440220432A94FC7F759730DD66CC7FB0044E563E6C0DF28C3CDF673CB1D2DF03862FA5022020F70FCF14FF24080E34FA5CA0F555C83A520FC4730F5EDA82523FB0E145E2DA" + "TxnSignature": "3044022044798D0E4310C7E79B2929308E765F0C29B2D2A1DB4FDF0D7A62DAB39A4874F402207DC871A0E0049078ECB98EAD1E0B78DAD17F4E3E6DF4AB2E5F6DAC9451A5630A" } }, { - "binary": "12001F2280000000240000000168400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074463044022065BB8ABE6E34ADB25C1350F7AF34B1DF01CE87A5ACE1610454EE6B2ED70A0D3302201A4CC9664A191E70F98E921E569E7D3D2EF7FC28353085BC8CBA5296425C287E8114550FC62003E785DC231A1058A05E56E3F09CF4E6801214AF80285F637EE4AF3C20378F9DFB12511ACB8D270118AF80285F637EE4AF3C20378F9DFB12511ACB8D270000000000000000000000000000000000000000550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12001F2280000000240000000168400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402203858DCC266B53EDFDF16359AF483323BF4DF7176CD0EDCCC253EF5556C9D131B0220755FE28874AA927C9B41D4C7D35D88BCA4B38B5B8E2F87D21B738F087F32B3988114550FC62003E785DC231A1058A05E56E3F09CF4E6801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011B14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "Bridge": { - "src_chain_door": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "src_chain_issue": "XRP", - "dst_chain_door": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "dst_chain_issue": "XRP" + "XChainBridge": { + "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "LockingChainIssue": "XRP", + "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "IssuingChainIssue": "XRP" }, "Fee": "10", "Flags": 2147483648, @@ -4487,39 +4487,39 @@ "SignatureReward": "10000", "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType": "XChainCreateClaimID", - "TxnSignature": "3044022065BB8ABE6E34ADB25C1350F7AF34B1DF01CE87A5ACE1610454EE6B2ED70A0D3302201A4CC9664A191E70F98E921E569E7D3D2EF7FC28353085BC8CBA5296425C287E" + "TxnSignature": "304402203858DCC266B53EDFDF16359AF483323BF4DF7176CD0EDCCC253EF5556C9D131B0220755FE28874AA927C9B41D4C7D35D88BCA4B38B5B8E2F87D21B738F087F32B398" } }, { - "binary": "120020228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402204C1E4F103CB24B10925F34DF2A90AD3008078A0A725A1F96A59652E34EF5071B02200F567E95FF140F12A35CDBD2324F8BE769BF57DE5D2F92367A4C8AAB7C5F34548114550FC62003E785DC231A1058A05E56E3F09CF4E60118AF80285F637EE4AF3C20378F9DFB12511ACB8D270000000000000000000000000000000000000000550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "120020228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402201B39894271B8512FE9C6E146587F695BC0E2AF19EC47570054FAA8B95A2CBC0C02201A9A63FEACD2416BC6E49EA45143927C474CC2CC85AA135A46A183423E76615A8114550FC62003E785DC231A1058A05E56E3F09CF4E6011B14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "Amount": "10000", - "Bridge": { - "src_chain_door": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "src_chain_issue": "XRP", - "dst_chain_door": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "dst_chain_issue": "XRP" + "XChainBridge": { + "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "LockingChainIssue": "XRP", + "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "IssuingChainIssue": "XRP" }, "Fee": "10", "Flags": 2147483648, "Sequence": 1, "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType": "XChainCommit", - "TxnSignature": "304402204C1E4F103CB24B10925F34DF2A90AD3008078A0A725A1F96A59652E34EF5071B02200F567E95FF140F12A35CDBD2324F8BE769BF57DE5D2F92367A4C8AAB7C5F3454", + "TxnSignature": "304402201B39894271B8512FE9C6E146587F695BC0E2AF19EC47570054FAA8B95A2CBC0C02201A9A63FEACD2416BC6E49EA45143927C474CC2CC85AA135A46A183423E76615A", "XChainClaimID": "0000000000000001" } }, { - "binary": "120021228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D4AFE8A4ACED40969B3E06EEC1D3C94FB9B6702537CC56FB180BA2F74E9CCB5C02203B30C46AB83B665BD3B4FF6AB3CBF33C138640CB7CA76888BB7280B114FC94458114550FC62003E785DC231A1058A05E56E3F09CF4E68314550FC62003E785DC231A1058A05E56E3F09CF4E60118AF80285F637EE4AF3C20378F9DFB12511ACB8D270000000000000000000000000000000000000000550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "120021228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CA14E5FB5F30FC698119ED7E7D8F291E48A21693190A01AD89E140035476EE9D02206A642A396246C726739195D5D2CCC0635E1A67EDB84DEFBD54D42F7809F45F8B8114550FC62003E785DC231A1058A05E56E3F09CF4E68314550FC62003E785DC231A1058A05E56E3F09CF4E6011B14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "Amount": "10000", - "Bridge": { - "src_chain_door": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "src_chain_issue": "XRP", - "dst_chain_door": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "dst_chain_issue": "XRP" + "XChainBridge": { + "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "LockingChainIssue": "XRP", + "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "IssuingChainIssue": "XRP" }, "Destination": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "Fee": "10", @@ -4527,7 +4527,7 @@ "Sequence": 1, "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType": "XChainClaim", - "TxnSignature": "3045022100D4AFE8A4ACED40969B3E06EEC1D3C94FB9B6702537CC56FB180BA2F74E9CCB5C02203B30C46AB83B665BD3B4FF6AB3CBF33C138640CB7CA76888BB7280B114FC9445", + "TxnSignature": "3045022100CA14E5FB5F30FC698119ED7E7D8F291E48A21693190A01AD89E140035476EE9D02206A642A396246C726739195D5D2CCC0635E1A67EDB84DEFBD54D42F7809F45F8B", "XChainClaimID": "0000000000000001" } } From 48214a90ca72f9920d4e75f4b979734f09fd2415 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 19 Jul 2022 10:44:47 +0100 Subject: [PATCH 10/70] rename Bridge -> XChainBridge in models --- packages/xrpl/src/models/common/index.ts | 10 +++++----- packages/xrpl/src/models/transactions/XChainClaim.ts | 8 ++++---- packages/xrpl/src/models/transactions/XChainCommit.ts | 8 ++++---- .../xrpl/src/models/transactions/XChainCreateBridge.ts | 8 ++++---- .../src/models/transactions/XChainCreateClaimID.ts | 8 ++++---- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index 0ded2760..ede00ed8 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -125,9 +125,9 @@ export interface NFTOffer { expiration?: number } -export interface Bridge { - src_chain_door: string - src_chain_issue: 'XRP' | IssuedCurrency - dst_chain_door: string - dst_chain_issue: 'XRP' | IssuedCurrency +export interface XChainBridge { + LockingChainDoor: string + LockingChainIssue: 'XRP' | IssuedCurrency + IssuingChainDoor: string + IssuingChainIssue: 'XRP' | IssuedCurrency } diff --git a/packages/xrpl/src/models/transactions/XChainClaim.ts b/packages/xrpl/src/models/transactions/XChainClaim.ts index b64322f7..29a00f7e 100644 --- a/packages/xrpl/src/models/transactions/XChainClaim.ts +++ b/packages/xrpl/src/models/transactions/XChainClaim.ts @@ -1,5 +1,5 @@ import { ValidationError } from '../../errors' -import { Amount, Bridge } from '../common' +import { Amount, XChainBridge } from '../common' import { BaseTransaction, validateBaseTransaction } from './common' @@ -10,7 +10,7 @@ import { BaseTransaction, validateBaseTransaction } from './common' export interface XChainClaim extends BaseTransaction { TransactionType: 'XChainClaim' - Bridge: Bridge + XChainBridge: XChainBridge XChainClaimID: number | string @@ -28,8 +28,8 @@ export interface XChainClaim extends BaseTransaction { export function validateXChainClaim(tx: Record): void { validateBaseTransaction(tx) - if (tx.Bridge == null) { - throw new ValidationError('XChainClaim: missing field Bridge') + if (tx.XChainBridge == null) { + throw new ValidationError('XChainClaim: missing field XChainBridge') } if (tx.XChainClaimID == null) { diff --git a/packages/xrpl/src/models/transactions/XChainCommit.ts b/packages/xrpl/src/models/transactions/XChainCommit.ts index 87afcd84..f2ebf584 100644 --- a/packages/xrpl/src/models/transactions/XChainCommit.ts +++ b/packages/xrpl/src/models/transactions/XChainCommit.ts @@ -1,5 +1,5 @@ import { ValidationError } from '../../errors' -import { Amount, Bridge } from '../common' +import { Amount, XChainBridge } from '../common' import { BaseTransaction, validateBaseTransaction } from './common' @@ -10,7 +10,7 @@ import { BaseTransaction, validateBaseTransaction } from './common' export interface XChainCommit extends BaseTransaction { TransactionType: 'XChainCommit' - Bridge: Bridge + XChainBridge: XChainBridge XChainClaimID: number | string @@ -26,8 +26,8 @@ export interface XChainCommit extends BaseTransaction { export function validateXChainCommit(tx: Record): void { validateBaseTransaction(tx) - if (tx.Bridge == null) { - throw new ValidationError('XChainCommit: missing field Bridge') + if (tx.XChainBridge == null) { + throw new ValidationError('XChainCommit: missing field XChainBridge') } if (tx.XChainCommitID == null) { diff --git a/packages/xrpl/src/models/transactions/XChainCreateBridge.ts b/packages/xrpl/src/models/transactions/XChainCreateBridge.ts index 1ba45d54..8356071b 100644 --- a/packages/xrpl/src/models/transactions/XChainCreateBridge.ts +++ b/packages/xrpl/src/models/transactions/XChainCreateBridge.ts @@ -1,5 +1,5 @@ import { ValidationError } from '../../errors' -import { Amount, Bridge } from '../common' +import { Amount, XChainBridge } from '../common' import { BaseTransaction, validateBaseTransaction } from './common' @@ -10,7 +10,7 @@ import { BaseTransaction, validateBaseTransaction } from './common' export interface XChainCreateBridge extends BaseTransaction { TransactionType: 'XChainCreateBridge' - Bridge: Bridge + XChainBridge: XChainBridge SignatureReward: Amount @@ -26,8 +26,8 @@ export interface XChainCreateBridge extends BaseTransaction { export function validateXChainCreateBridge(tx: Record): void { validateBaseTransaction(tx) - if (tx.Bridge == null) { - throw new ValidationError('XChainCreateBridge: missing field Bridge') + if (tx.XChainBridge == null) { + throw new ValidationError('XChainCreateBridge: missing field XChainBridge') } if (tx.SignatureReward == null) { diff --git a/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts b/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts index 341674ed..ea90ed5d 100644 --- a/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts +++ b/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts @@ -1,5 +1,5 @@ import { ValidationError } from '../../errors' -import { Amount, Bridge } from '../common' +import { Amount, XChainBridge } from '../common' import { BaseTransaction, validateBaseTransaction } from './common' @@ -10,7 +10,7 @@ import { BaseTransaction, validateBaseTransaction } from './common' export interface XChainCreateClaimID extends BaseTransaction { TransactionType: 'XChainCreateClaimID' - Bridge: Bridge + XChainBridge: XChainBridge SignatureReward: Amount @@ -26,8 +26,8 @@ export interface XChainCreateClaimID extends BaseTransaction { export function validateXChainCreateClaimID(tx: Record): void { validateBaseTransaction(tx) - if (tx.Bridge == null) { - throw new ValidationError('XChainCreateClaimID: missing field Bridge') + if (tx.XChainBridge == null) { + throw new ValidationError('XChainCreateClaimID: missing field XChainBridge') } if (tx.SignatureReward == null) { From ac88bf3079234d9b15fbe267e163730bf4a86927 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 19 Jul 2022 11:23:15 +0100 Subject: [PATCH 11/70] add codec support for XChainAddAttestation --- .../ripple-binary-codec/src/types/index.ts | 6 +- .../src/types/xchain-attestation-batch.ts | 118 ++++++++++++++++++ .../src/types/xchain-bridge.ts | 8 +- .../test/fixtures/codec-fixtures.json | 35 ++++++ 4 files changed, 161 insertions(+), 6 deletions(-) create mode 100644 packages/ripple-binary-codec/src/types/xchain-attestation-batch.ts diff --git a/packages/ripple-binary-codec/src/types/index.ts b/packages/ripple-binary-codec/src/types/index.ts index 60f4ac79..c4096d5d 100644 --- a/packages/ripple-binary-codec/src/types/index.ts +++ b/packages/ripple-binary-codec/src/types/index.ts @@ -7,7 +7,6 @@ import { import { AccountID } from './account-id' import { Amount } from './amount' import { Blob } from './blob' -import { XChainBridge } from './xchain-bridge' import { Currency } from './currency' import { Hash128 } from './hash-128' import { Hash160 } from './hash-160' @@ -21,12 +20,13 @@ import { UInt32 } from './uint-32' import { UInt64 } from './uint-64' import { UInt8 } from './uint-8' import { Vector256 } from './vector-256' +import { XChainAttestationBatch } from './xchain-attestation-batch' +import { XChainBridge } from './xchain-bridge' const coreTypes = { AccountID, Amount, Blob, - XChainBridge, Currency, Hash128, Hash160, @@ -40,6 +40,8 @@ const coreTypes = { UInt32, UInt64, Vector256, + XChainAttestationBatch, + XChainBridge, } Object.values(Field).forEach((field) => { diff --git a/packages/ripple-binary-codec/src/types/xchain-attestation-batch.ts b/packages/ripple-binary-codec/src/types/xchain-attestation-batch.ts new file mode 100644 index 00000000..fc6b0bbd --- /dev/null +++ b/packages/ripple-binary-codec/src/types/xchain-attestation-batch.ts @@ -0,0 +1,118 @@ +import { BinaryParser } from '../serdes/binary-parser' + +import { JsonObject, SerializedType } from './serialized-type' +import { Buffer } from 'buffer/' +import { XChainBridge, XChainBridgeObject } from './xchain-bridge' +import { STArray } from './st-array' + +/** + * Interface for JSON objects that represent cross-chain attestations + */ +interface XChainAttestationBatchObject extends JsonObject { + XChainBridge: XChainBridgeObject + XChainClaimAttestationBatch: JsonObject[] + XChainCreateAccountAttestationBatch: JsonObject[] +} + +/** + * Type guard for XChainAttestationBatchObject + */ +function isXChainAttestationBatchObject( + arg, +): arg is XChainAttestationBatchObject { + const keys = Object.keys(arg).sort() + return ( + keys.length === 3 && + keys[0] === 'XChainBridge' && + keys[1] === 'XChainClaimAttestationBatch' && + keys[2] === 'XChainCreateAccountAttestationBatch' + ) +} + +/** + * Class for serializing/deserializing XChainAttestationBatchs + */ +class XChainAttestationBatch extends SerializedType { + static readonly ZERO_XCHAIN_ATTESTATION_BATCH: XChainAttestationBatch = + new XChainAttestationBatch( + Buffer.concat([ + Buffer.from([0x14]), + Buffer.alloc(40), + Buffer.from([0x14]), + Buffer.alloc(40), + ]), + ) + + static readonly TYPE_ORDER: { name: string; type: typeof SerializedType }[] = + [ + { name: 'XChainBridge', type: XChainBridge }, + { name: 'XChainClaimAttestationBatch', type: STArray }, + { name: 'XChainCreateAccountAttestationBatch', type: STArray }, + ] + + constructor(bytes: Buffer) { + super(bytes ?? XChainAttestationBatch.ZERO_XCHAIN_ATTESTATION_BATCH.bytes) + } + + /** + * Construct a cross-chain bridge from a JSON + * + * @param value XChainAttestationBatch or JSON to parse into a XChainAttestationBatch + * @returns A XChainAttestationBatch object + */ + static from( + value: T, + ): XChainAttestationBatch { + if (value instanceof XChainAttestationBatch) { + return value + } + + if (isXChainAttestationBatchObject(value)) { + const bytes: Array = [] + this.TYPE_ORDER.forEach((item) => { + const { name, type } = item + const object = type.from(value[name]) + bytes.push(object.toBytes()) + }) + return new XChainAttestationBatch(Buffer.concat(bytes)) + } + + throw new Error('Invalid type to construct a XChainAttestationBatch') + } + + /** + * Read a XChainAttestationBatch from a BinaryParser + * + * @param parser BinaryParser to read the XChainAttestationBatch from + * @returns A XChainAttestationBatch object + */ + static fromParser(parser: BinaryParser): XChainAttestationBatch { + const bytes: Array = [] + + this.TYPE_ORDER.forEach((item) => { + const { type } = item + const object = type.fromParser(parser) + bytes.push(object.toBytes()) + }) + + return new XChainAttestationBatch(Buffer.concat(bytes)) + } + + /** + * Get the JSON representation of this XChainAttestationBatch + * + * @returns the JSON interpretation of this.bytes + */ + toJSON(): XChainAttestationBatchObject { + const parser = new BinaryParser(this.toString()) + const json = {} + XChainAttestationBatch.TYPE_ORDER.forEach((item) => { + const { name, type } = item + const object = type.fromParser(parser).toJSON() + json[name] = object + }) + return json as XChainAttestationBatchObject + } +} + +export { XChainAttestationBatch, XChainAttestationBatchObject } diff --git a/packages/ripple-binary-codec/src/types/xchain-bridge.ts b/packages/ripple-binary-codec/src/types/xchain-bridge.ts index ce4dc258..4870129a 100644 --- a/packages/ripple-binary-codec/src/types/xchain-bridge.ts +++ b/packages/ripple-binary-codec/src/types/xchain-bridge.ts @@ -9,10 +9,10 @@ import { IssuedCurrency, IssuedCurrencyObject } from './issued-currency' * Interface for JSON objects that represent cross-chain bridges */ interface XChainBridgeObject extends JsonObject { - dst_chain_door: string - dst_chain_issue: IssuedCurrencyObject | string - src_chain_door: string - src_chain_issue: IssuedCurrencyObject | string + LockingChainDoor: string + LockingChainIssue: IssuedCurrencyObject | string + IssuingChainDoor: string + IssuingChainIssue: IssuedCurrencyObject | string } /** diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 006fe5b2..22f6aebe 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4530,6 +4530,41 @@ "TxnSignature": "3045022100CA14E5FB5F30FC698119ED7E7D8F291E48A21693190A01AD89E140035476EE9D02206A642A396246C726739195D5D2CCC0635E1A67EDB84DEFBD54D42F7809F45F8B", "XChainClaimID": "0000000000000001" } + }, + { + "binary": "1200242280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100DCAC6A97BC4AA1379504FD5293FDFA46A4C216DDC13F3950F9692E0F803862A602206583360A60961E2988041E7E8589037A233771DCFB84E7A4710940A878EAFD7581142F3CC37C1D5616B3BBF1AABC49F6BFF46A920087011C14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E01C30140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", + "json": { + "Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Fee" : "10", + "Flags" : 2147483648, + "Sequence" : 4, + "SigningPubKey" : "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType" : "XChainAddAttestation", + "TxnSignature" : "3045022100DCAC6A97BC4AA1379504FD5293FDFA46A4C216DDC13F3950F9692E0F803862A602206583360A60961E2988041E7E8589037A233771DCFB84E7A4710940A878EAFD75", + "XChainAttestationBatch" : { + "XChainBridge" : { + "IssuingChainDoor" : "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", + "IssuingChainIssue" : "XRP", + "LockingChainDoor" : "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC", + "LockingChainIssue" : "XRP" + }, + "XChainClaimAttestationBatch" : [ + { + "XChainClaimAttestationBatchElement" : { + "Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Amount" : "100000000", + "AttestationRewardAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Destination" : "r9A8UyNpW3X46FUc6P7JZqgn6WgAPjBwPg", + "PublicKey" : "03DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0", + "Signature" : "616263", + "WasLockingChainSend" : 1, + "XChainClaimID" : "0000000000000000" + } + } + ], + "XChainCreateAccountAttestationBatch" : [] + } + } } ], "ledgerData": [{ From 492de323882538fd8080ee9067d8eae08b7932c2 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 19 Jul 2022 11:32:59 +0100 Subject: [PATCH 12/70] add XChainAddAttestation model --- .../transactions/XChainAddAttestation.ts | 66 +++++++++++++++++++ .../xrpl/src/models/transactions/index.ts | 1 + .../src/models/transactions/transaction.ts | 9 +++ 3 files changed, 76 insertions(+) create mode 100644 packages/xrpl/src/models/transactions/XChainAddAttestation.ts diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts new file mode 100644 index 00000000..523753c0 --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -0,0 +1,66 @@ +import { ValidationError } from '../../errors' +import { Amount, XChainBridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainAddAttestation extends BaseTransaction { + TransactionType: 'XChainAddAttestation' + + XChainBridge: XChainBridge + + XChainClaimAttestationBatch: { + XChainClaimAttestationBatchElement: { + Account: string + + Amount: Amount + + AttestationRewardAccount: string + + Destination: string + + PublicKey: string + + Signature: string + + WasLockingChainSend: 0 | 1 + + XChainClaimID: string + }[] + } + + XChainCreateAccountAttestationBatch: {}[] +} + +/** + * Verify the form and type of a XChainAddAttestation at runtime. + * + * @param tx - A XChainAddAttestation Transaction. + * @throws When the XChainAddAttestation is malformed. + */ +export function validateXChainAddAttestation( + tx: Record, +): void { + validateBaseTransaction(tx) + + if (tx.XChainBridge == null) { + throw new ValidationError( + 'XChainAddAttestation: missing field XChainBridge', + ) + } + + if (tx.XChainClaimAttestationBatch == null) { + throw new ValidationError( + 'XChainAddAttestation: missing field XChainClaimAttestationBatch', + ) + } + + if (tx.XChainCreateAccountAttestationBatch == null) { + throw new ValidationError( + 'XChainAddAttestation: missing field XChainCreateAccountAttestationBatch', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 15225c7c..66741134 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -45,6 +45,7 @@ export { SetRegularKey } from './setRegularKey' export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' +export { XChainAddAttestation } from './XChainAddAttestation' export { XChainClaim } from './XChainClaim' export { XChainCommit } from './XChainCommit' export { XChainCreateBridge } from './XChainCreateBridge' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 35479866..06c84c11 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -50,6 +50,10 @@ import { SetRegularKey, validateSetRegularKey } from './setRegularKey' import { SignerListSet, validateSignerListSet } from './signerListSet' import { TicketCreate, validateTicketCreate } from './ticketCreate' import { TrustSet, validateTrustSet } from './trustSet' +import { + XChainAddAttestation, + validateXChainAddAttestation, +} from './XChainAddAttestation' import { XChainClaim, validateXChainClaim } from './XChainClaim' import { XChainCommit, validateXChainCommit } from './XChainCommit' import { @@ -89,6 +93,7 @@ export type Transaction = | SignerListSet | TicketCreate | TrustSet + | XChainAddAttestation | XChainClaim | XChainCommit | XChainCreateBridge @@ -217,6 +222,10 @@ export function validate(transaction: Record): void { validateTrustSet(tx) break + case 'XChainAddAttestation': + validateXChainAddAttestation(tx) + break + case 'XChainClaim': validateXChainClaim(tx) break From c371a38e879e1a40ddccce918878b9102311f1ce Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 19 Jul 2022 11:33:54 +0100 Subject: [PATCH 13/70] undo debugging change --- packages/ripple-binary-codec/src/serdes/binary-parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ripple-binary-codec/src/serdes/binary-parser.ts b/packages/ripple-binary-codec/src/serdes/binary-parser.ts index 52f0d650..534ef52f 100644 --- a/packages/ripple-binary-codec/src/serdes/binary-parser.ts +++ b/packages/ripple-binary-codec/src/serdes/binary-parser.ts @@ -7,7 +7,7 @@ import { Buffer } from 'buffer/' * BinaryParser is used to compute fields and values from a HexString */ class BinaryParser { - public bytes: Buffer + private bytes: Buffer /** * Initialize bytes to a hex string From 00796001a3f472ea93e1b504c8e5135f7e1f3945 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 19 Jul 2022 11:40:16 +0100 Subject: [PATCH 14/70] fix linting issues --- .../xrpl/src/models/transactions/XChainAddAttestation.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index 523753c0..121c1e0e 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -12,7 +12,7 @@ export interface XChainAddAttestation extends BaseTransaction { XChainBridge: XChainBridge - XChainClaimAttestationBatch: { + XChainClaimAttestationBatch: Array<{ XChainClaimAttestationBatchElement: { Account: string @@ -29,10 +29,11 @@ export interface XChainAddAttestation extends BaseTransaction { WasLockingChainSend: 0 | 1 XChainClaimID: string - }[] - } + } + }> - XChainCreateAccountAttestationBatch: {}[] + // TODO: update this once it's been implemented in rippled + XChainCreateAccountAttestationBatch: Array> } /** From c29319aad8e7678424316686a9f2a6ebc4ef1db8 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Sun, 31 Jul 2022 15:49:49 +0200 Subject: [PATCH 15/70] update definitions.json for new rippled code, add new tests/update old tests --- .../src/enums/definitions.json | 49 +++--- .../test/fixtures/codec-fixtures.json | 139 ++++++++++++++++-- 2 files changed, 155 insertions(+), 33 deletions(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 02ebd23d..28d3e98e 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -21,11 +21,10 @@ "UInt192": 21, "UInt384": 22, "UInt512": 23, - "XChainAttestations": 24, - "XChainClaimProof": 25, - "Issue": 26, - "XChainBridge": 27, - "XChainAttestationBatch": 28, + "XChainClaimProof": 24, + "Issue": 25, + "XChainBridge": 26, + "XChainAttestationBatch": 27, "Transaction": 10001, "LedgerEntry": 10002, "Validation": 10003, @@ -43,6 +42,7 @@ "LedgerHashes": 104, "Amendments": 102, "XChainClaimID": 113, + "XChainCreateAccountClaimID": 116, "FeeSettings": 115, "Escrow": 117, "PayChannel": 120, @@ -1958,16 +1958,6 @@ "type": "XChainClaimProof" } ], - [ - "XChainAttestations", - { - "nth": 1, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "XChainAttestations" - } - ], [ "LockingChainIssue", { @@ -2219,7 +2209,7 @@ } ], [ - "XChainProofSig", + "XChainClaimProofSig", { "nth": 25, "isVLEncoded": false, @@ -2229,7 +2219,7 @@ } ], [ - "XChainAttestationSigs", + "XChainCreateAccountProofSig", { "nth": 26, "isVLEncoded": false, @@ -2447,6 +2437,26 @@ "isSigningField": true, "type": "STArray" } + ], + [ + "XChainClaimAttestations", + { + "nth": 24, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "XChainCreateAccountAttestations", + { + "nth": 25, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } ] ], "TRANSACTION_RESULTS": { @@ -2603,7 +2613,10 @@ "tecXCHAIN_CLAIM_WRONG_CHAIN": 169, "tecXCHAIN_REWARD_MISMATCH": 170, "tecXCHAIN_NO_SIGNERS_LIST": 171, - "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 172 + "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 172, + "tecXCHAIN_INSUFF_CREATE_AMOUNT": 173, + "tecXCHAIN_ACCOUNT_CREATE_PAST": 174, + "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 175 }, "TRANSACTION_TYPES": { "Invalid": -1, diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 22f6aebe..f645044f 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4451,9 +4451,9 @@ } }, { - "binary": "12001E2200000000240000000168400000000000000A601540000000000003E86016400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074463044022044798D0E4310C7E79B2929308E765F0C29B2D2A1DB4FDF0D7A62DAB39A4874F402207DC871A0E0049078ECB98EAD1E0B78DAD17F4E3E6DF4AB2E5F6DAC9451A5630A8114AF80285F637EE4AF3C20378F9DFB12511ACB8D27011B14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12001E2200000000240000000168400000000000000A601540000000000003E86016400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A270918114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { - "Account": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", "LockingChainIssue": "XRP", @@ -4467,13 +4467,13 @@ "SignatureReward": "1000", "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType": "XChainCreateBridge", - "TxnSignature": "3044022044798D0E4310C7E79B2929308E765F0C29B2D2A1DB4FDF0D7A62DAB39A4874F402207DC871A0E0049078ECB98EAD1E0B78DAD17F4E3E6DF4AB2E5F6DAC9451A5630A" + "TxnSignature": "30440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A27091" } }, { - "binary": "12001F2280000000240000000168400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402203858DCC266B53EDFDF16359AF483323BF4DF7176CD0EDCCC253EF5556C9D131B0220755FE28874AA927C9B41D4C7D35D88BCA4B38B5B8E2F87D21B738F087F32B3988114550FC62003E785DC231A1058A05E56E3F09CF4E6801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011B14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12001F2280000000240000000168400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { - "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", "LockingChainIssue": "XRP", @@ -4487,13 +4487,13 @@ "SignatureReward": "10000", "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType": "XChainCreateClaimID", - "TxnSignature": "304402203858DCC266B53EDFDF16359AF483323BF4DF7176CD0EDCCC253EF5556C9D131B0220755FE28874AA927C9B41D4C7D35D88BCA4B38B5B8E2F87D21B738F087F32B398" + "TxnSignature": "30440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD" } }, { - "binary": "120020228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402201B39894271B8512FE9C6E146587F695BC0E2AF19EC47570054FAA8B95A2CBC0C02201A9A63FEACD2416BC6E49EA45143927C474CC2CC85AA135A46A183423E76615A8114550FC62003E785DC231A1058A05E56E3F09CF4E6011B14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "120020228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074453043021F177323F0D93612C82A4393A99B23905A7E675753FD80C52997AFAB13F5F9D002203BFFAF457E90BDA65AABE8F8762BD96162FAD98A0C030CCD69B06EE9B12BBFFE8114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { - "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Amount": "10000", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", @@ -4506,14 +4506,14 @@ "Sequence": 1, "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType": "XChainCommit", - "TxnSignature": "304402201B39894271B8512FE9C6E146587F695BC0E2AF19EC47570054FAA8B95A2CBC0C02201A9A63FEACD2416BC6E49EA45143927C474CC2CC85AA135A46A183423E76615A", + "TxnSignature": "3043021F177323F0D93612C82A4393A99B23905A7E675753FD80C52997AFAB13F5F9D002203BFFAF457E90BDA65AABE8F8762BD96162FAD98A0C030CCD69B06EE9B12BBFFE", "XChainClaimID": "0000000000000001" } }, { - "binary": "120021228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CA14E5FB5F30FC698119ED7E7D8F291E48A21693190A01AD89E140035476EE9D02206A642A396246C726739195D5D2CCC0635E1A67EDB84DEFBD54D42F7809F45F8B8114550FC62003E785DC231A1058A05E56E3F09CF4E68314550FC62003E785DC231A1058A05E56E3F09CF4E6011B14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "120021228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220445F7469FDA401787D9EE8A9B6E24DFF81E94F4C09FD311D2C0A58FCC02C684A022029E2EF34A5EA35F50D5BB57AC6320AD3AE12C13C8D1379B255A486D72CED142E8114B5F762798A53D543A014CAF8B297CFF8F2F937E88314550FC62003E785DC231A1058A05E56E3F09CF4E6011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { - "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Amount": "10000", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", @@ -4527,20 +4527,20 @@ "Sequence": 1, "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType": "XChainClaim", - "TxnSignature": "3045022100CA14E5FB5F30FC698119ED7E7D8F291E48A21693190A01AD89E140035476EE9D02206A642A396246C726739195D5D2CCC0635E1A67EDB84DEFBD54D42F7809F45F8B", + "TxnSignature": "30440220445F7469FDA401787D9EE8A9B6E24DFF81E94F4C09FD311D2C0A58FCC02C684A022029E2EF34A5EA35F50D5BB57AC6320AD3AE12C13C8D1379B255A486D72CED142E", "XChainClaimID": "0000000000000001" } }, { - "binary": "1200242280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100DCAC6A97BC4AA1379504FD5293FDFA46A4C216DDC13F3950F9692E0F803862A602206583360A60961E2988041E7E8589037A233771DCFB84E7A4710940A878EAFD7581142F3CC37C1D5616B3BBF1AABC49F6BFF46A920087011C14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E01C30140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", + "binary": "1200242280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E01C30140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", "json": { - "Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee" : "10", "Flags" : 2147483648, "Sequence" : 4, "SigningPubKey" : "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", "TransactionType" : "XChainAddAttestation", - "TxnSignature" : "3045022100DCAC6A97BC4AA1379504FD5293FDFA46A4C216DDC13F3950F9692E0F803862A602206583360A60961E2988041E7E8589037A233771DCFB84E7A4710940A878EAFD75", + "TxnSignature" : "3045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E2", "XChainAttestationBatch" : { "XChainBridge" : { "IssuingChainDoor" : "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", @@ -4565,6 +4565,115 @@ "XChainCreateAccountAttestationBatch" : [] } } + }, + { + "binary": "120022228000000024000000016140000000000F424068400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "json": { + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "XChainBridge": { + "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "LockingChainIssue": "XRP", + "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "IssuingChainIssue": "XRP" + }, + "Amount": "1000000", + "Fee": "10", + "Flags": 2147483648, + "Destination": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "Sequence": 1, + "SignatureReward": "10000", + "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType": "SidechainXChainAccountCreate", + "TxnSignature": "304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF18" + } + }, + { + "binary": "1200242280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", + "json": { + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Fee": "10", + "Flags": 2147483648, + "Sequence": 1, + "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType": "XChainAddAttestation", + "TxnSignature": "304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC9535", + "XChainAttestationBatch": { + "XChainBridge": { + "IssuingChainDoor": "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", + "IssuingChainIssue": "XRP", + "LockingChainDoor": "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC", + "LockingChainIssue": "XRP" + }, + "XChainClaimAttestationBatch": [], + "XChainCreateAccountAttestationBatch": [ + { + "XChainCreateAccountAttestationBatchElement": { + "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Amount": "1000000000", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", + "PublicKey": "03ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B5", + "Signature": "3044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A26", + "SignatureReward": "1000000", + "WasLockingChainSend": 1, + "XChainAccountCreateCount": "0000000000000001" + } + }, + { + "XChainCreateAccountAttestationBatchElement": { + "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Amount": "1000000000", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", + "PublicKey": "02A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A15", + "Signature": "304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED", + "SignatureReward": "1000000", + "WasLockingChainSend": 1, + "XChainAccountCreateCount": "0000000000000001" + } + }, + { + "XChainCreateAccountAttestationBatchElement": { + "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Amount": "1000000000", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", + "PublicKey": "02F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC", + "Signature": "30450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB2185428", + "SignatureReward": "1000000", + "WasLockingChainSend": 1, + "XChainAccountCreateCount": "0000000000000001" + } + }, + { + "XChainCreateAccountAttestationBatchElement": { + "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Amount": "1000000000", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", + "PublicKey": "02498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D760592", + "Signature": "3045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E", + "SignatureReward": "1000000", + "WasLockingChainSend": 1, + "XChainAccountCreateCount": "0000000000000001" + } + }, + { + "XChainCreateAccountAttestationBatchElement": { + "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Amount": "1000000000", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", + "PublicKey": "03219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD817", + "Signature": "3045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB21", + "SignatureReward": "1000000", + "WasLockingChainSend": 1, + "XChainAccountCreateCount": "0000000000000001" + } + } + ] + } + } } ], "ledgerData": [{ From 2c658fe145bf3edc62053be6a6fa952137d2668f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Sun, 31 Jul 2022 16:07:52 +0200 Subject: [PATCH 16/70] add/update models --- .../transactions/XChainAddAttestation.ts | 21 ++++++- .../xrpl/src/models/transactions/index.ts | 1 + .../sidechainXChainAccountCreate.ts | 56 +++++++++++++++++++ .../src/models/transactions/transaction.ts | 8 +++ 4 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 packages/xrpl/src/models/transactions/sidechainXChainAccountCreate.ts diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index 121c1e0e..dfbc8e14 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -32,8 +32,25 @@ export interface XChainAddAttestation extends BaseTransaction { } }> - // TODO: update this once it's been implemented in rippled - XChainCreateAccountAttestationBatch: Array> + XChainCreateAccountAttestationBatch: Array<{ + XChainClaimAttestationBatchElement: { + Account: string + + Amount: Amount + + AttestationRewardAccount: string + + Destination: string + + PublicKey: string + + Signature: string + + WasLockingChainSend: 0 | 1 + + XChainAccountCreateCount: string + } + }> } /** diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 66741134..0327bdb8 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -50,3 +50,4 @@ export { XChainClaim } from './XChainClaim' export { XChainCommit } from './XChainCommit' export { XChainCreateBridge } from './XChainCreateBridge' export { XChainCreateClaimID } from './XChainCreateClaimID' +export { SidechainXChainAccountCreate } from './sidechainXChainAccountCreate' diff --git a/packages/xrpl/src/models/transactions/sidechainXChainAccountCreate.ts b/packages/xrpl/src/models/transactions/sidechainXChainAccountCreate.ts new file mode 100644 index 00000000..4043be34 --- /dev/null +++ b/packages/xrpl/src/models/transactions/sidechainXChainAccountCreate.ts @@ -0,0 +1,56 @@ +import { ValidationError } from '../../errors' +import { Amount, XChainBridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface SidechainXChainAccountCreate extends BaseTransaction { + TransactionType: 'SidechainXChainAccountCreate' + + XChainBridge: XChainBridge + + SignatureReward: number | string + + Destination: string + + Amount: Amount +} + +/** + * Verify the form and type of a SidechainXChainAccountCreate at runtime. + * + * @param tx - A SidechainXChainAccountCreate Transaction. + * @throws When the SidechainXChainAccountCreate is malformed. + */ +export function validateSidechainXChainAccountCreate( + tx: Record, +): void { + validateBaseTransaction(tx) + + if (tx.XChainBridge == null) { + throw new ValidationError( + 'SidechainXChainAccountCreate: missing field XChainBridge', + ) + } + + if (tx.SignatureReward == null) { + throw new ValidationError( + 'SidechainXChainAccountCreate: missing field SignatureReward', + ) + } + + if (tx.Destination == null) { + throw new ValidationError( + 'SidechainXChainAccountCreate: missing field Destination', + ) + } + + if (tx.Amount == null) { + throw new ValidationError( + 'SidechainXChainAccountCreate: missing field Amount', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 06c84c11..ca6b4c2e 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -47,6 +47,10 @@ import { validatePaymentChannelFund, } from './paymentChannelFund' import { SetRegularKey, validateSetRegularKey } from './setRegularKey' +import { + SidechainXChainAccountCreate, + validateSidechainXChainAccountCreate, +} from './sidechainXChainAccountCreate' import { SignerListSet, validateSignerListSet } from './signerListSet' import { TicketCreate, validateTicketCreate } from './ticketCreate' import { TrustSet, validateTrustSet } from './trustSet' @@ -98,6 +102,7 @@ export type Transaction = | XChainCommit | XChainCreateBridge | XChainCreateClaimID + | SidechainXChainAccountCreate /** * @category Transaction Models @@ -242,6 +247,9 @@ export function validate(transaction: Record): void { validateXChainCreateClaimID(tx) break + case 'SidechainXChainAccountCreate': + validateSidechainXChainAccountCreate(tx) + default: throw new ValidationError( `Invalid field TransactionType: ${tx.TransactionType}`, From dab0667b2fa9ca9d314332f13539acaa4d7ec278 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Sun, 31 Jul 2022 16:50:26 +0200 Subject: [PATCH 17/70] fix models --- .../transactions/XChainAddAttestation.ts | 52 ++++++++++--------- .../src/models/transactions/XChainCommit.ts | 2 +- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index dfbc8e14..e6a4f780 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -10,47 +10,49 @@ import { BaseTransaction, validateBaseTransaction } from './common' export interface XChainAddAttestation extends BaseTransaction { TransactionType: 'XChainAddAttestation' - XChainBridge: XChainBridge + XChainAttestationBatch: { + XChainBridge: XChainBridge - XChainClaimAttestationBatch: Array<{ - XChainClaimAttestationBatchElement: { - Account: string + XChainClaimAttestationBatch: Array<{ + XChainClaimAttestationBatchElement: { + Account: string - Amount: Amount + Amount: Amount - AttestationRewardAccount: string + AttestationRewardAccount: string - Destination: string + Destination: string - PublicKey: string + PublicKey: string - Signature: string + Signature: string - WasLockingChainSend: 0 | 1 + WasLockingChainSend: 0 | 1 - XChainClaimID: string - } - }> + XChainClaimID: string + } + }> - XChainCreateAccountAttestationBatch: Array<{ - XChainClaimAttestationBatchElement: { - Account: string + XChainCreateAccountAttestationBatch: Array<{ + XChainClaimAttestationBatchElement: { + Account: string - Amount: Amount + Amount: Amount - AttestationRewardAccount: string + AttestationRewardAccount: string - Destination: string + Destination: string - PublicKey: string + PublicKey: string - Signature: string + Signature: string - WasLockingChainSend: 0 | 1 + WasLockingChainSend: 0 | 1 - XChainAccountCreateCount: string - } - }> + XChainAccountCreateCount: string + } + }> + } } /** diff --git a/packages/xrpl/src/models/transactions/XChainCommit.ts b/packages/xrpl/src/models/transactions/XChainCommit.ts index f2ebf584..b3205e96 100644 --- a/packages/xrpl/src/models/transactions/XChainCommit.ts +++ b/packages/xrpl/src/models/transactions/XChainCommit.ts @@ -30,7 +30,7 @@ export function validateXChainCommit(tx: Record): void { throw new ValidationError('XChainCommit: missing field XChainBridge') } - if (tx.XChainCommitID == null) { + if (tx.XChainClaimID == null) { throw new ValidationError('XChainCommit: missing field XChainClaimID') } From c4dd6fba84f56eb5b9f774b915f7fdc3024ef76f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Sun, 31 Jul 2022 16:55:38 +0200 Subject: [PATCH 18/70] fix bugs --- .../models/transactions/XChainAddAttestation.ts | 17 +++++++++++++---- .../xrpl/src/models/transactions/transaction.ts | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index e6a4f780..fcbccfdb 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -66,19 +66,28 @@ export function validateXChainAddAttestation( ): void { validateBaseTransaction(tx) - if (tx.XChainBridge == null) { + if (tx.XChainAttestationBatch == null) { throw new ValidationError( - 'XChainAddAttestation: missing field XChainBridge', + 'XChainAddAttestation: missing field XChainAttestationBatch', ) } - if (tx.XChainClaimAttestationBatch == null) { + if (typeof tx.XChainAttestationBatch !== 'object') { + throw new ValidationError( + 'XChainAddAttestation: XChainAttestationBatch must be an object', + ) + } + + /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- known to be this */ + const attestationBatch = tx.XChainAttestationBatch as Record + + if (attestationBatch.XChainClaimAttestationBatch == null) { throw new ValidationError( 'XChainAddAttestation: missing field XChainClaimAttestationBatch', ) } - if (tx.XChainCreateAccountAttestationBatch == null) { + if (attestationBatch.XChainCreateAccountAttestationBatch == null) { throw new ValidationError( 'XChainAddAttestation: missing field XChainCreateAccountAttestationBatch', ) diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index ca6b4c2e..466aa9b6 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -249,6 +249,7 @@ export function validate(transaction: Record): void { case 'SidechainXChainAccountCreate': validateSidechainXChainAccountCreate(tx) + break default: throw new ValidationError( From 58657f373c76dba346ae6156f93f73e8827102fa Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Sun, 31 Jul 2022 17:01:40 +0200 Subject: [PATCH 19/70] fix more things --- .../src/models/transactions/XChainAddAttestation.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index fcbccfdb..5a6eb7a1 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -81,15 +81,21 @@ export function validateXChainAddAttestation( /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- known to be this */ const attestationBatch = tx.XChainAttestationBatch as Record + if (attestationBatch.XChainBridge == null) { + throw new ValidationError( + 'XChainAddAttestation: missing field XChainAttestationBatch.XChainBridge', + ) + } + if (attestationBatch.XChainClaimAttestationBatch == null) { throw new ValidationError( - 'XChainAddAttestation: missing field XChainClaimAttestationBatch', + 'XChainAddAttestation: missing field XChainAttestationBatch.XChainClaimAttestationBatch', ) } if (attestationBatch.XChainCreateAccountAttestationBatch == null) { throw new ValidationError( - 'XChainAddAttestation: missing field XChainCreateAccountAttestationBatch', + 'XChainAddAttestation: missing field XChainAttestationBatch.XChainCreateAccountAttestationBatch', ) } } From df80702c6cab20844a366edf7e559e596641c129 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Sun, 31 Jul 2022 17:17:01 +0200 Subject: [PATCH 20/70] update history --- packages/xrpl/HISTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md index 87903cb1..90a82aad 100644 --- a/packages/xrpl/HISTORY.md +++ b/packages/xrpl/HISTORY.md @@ -21,6 +21,7 @@ Wallet.fromMmnemonic() ### Added * Optional custom amount field to `fundWallet`. +* Support for the cross-chain bridge feature. ### Changed * Add support for Transaction objects in `verifyTransaction` From ad4c952fbf50b7d331f00ffe3ee72cd2ed6bbb4d Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 3 Aug 2022 14:09:54 +0200 Subject: [PATCH 21/70] update binary-codec --- .../src/enums/definitions.json | 1 + .../test/fixtures/codec-fixtures.json | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 28d3e98e..e96439fe 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -2655,6 +2655,7 @@ "SidechainXChainAccountCreate": 34, "SidechainXChainAccountClaim": 35, "XChainAddAttestation": 36, + "XChainModifyBridge": 37, "EnableAmendment": 100, "SetFee": 101, "UNLModify": 102 diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index f645044f..29d3b7f1 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4470,6 +4470,26 @@ "TxnSignature": "30440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A27091" } }, + { + "binary": "1200252200000000240000000168400000000000000A601540000000000003E86016400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "json": { + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "XChainBridge": { + "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "LockingChainIssue": "XRP", + "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "IssuingChainIssue": "XRP" + }, + "Fee": "10", + "Flags": 0, + "MinAccountCreateAmount": "10000", + "Sequence": 1, + "SignatureReward": "1000", + "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType": "XChainModifyBridge", + "TxnSignature": "3045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E5" + } + }, { "binary": "12001F2280000000240000000168400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { From 50335554ab280439f03824dd9fca8acf8355a078 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 3 Aug 2022 14:12:41 +0200 Subject: [PATCH 22/70] add XChainModifyBridge model --- .../models/transactions/XChainModifyBridge.ts | 38 +++++++++++++++++++ .../xrpl/src/models/transactions/index.ts | 1 + .../src/models/transactions/transaction.ts | 9 +++++ 3 files changed, 48 insertions(+) create mode 100644 packages/xrpl/src/models/transactions/XChainModifyBridge.ts diff --git a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts new file mode 100644 index 00000000..f81f52de --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts @@ -0,0 +1,38 @@ +import { ValidationError } from '../../errors' +import { Amount, XChainBridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainModifyBridge extends BaseTransaction { + TransactionType: 'XChainModifyBridge' + + XChainBridge: XChainBridge + + SignatureReward: Amount + + MinAccountCreateAmount?: Amount +} + +/** + * Verify the form and type of a XChainModifyBridge at runtime. + * + * @param tx - A XChainModifyBridge Transaction. + * @throws When the XChainModifyBridge is malformed. + */ +export function validateXChainModifyBridge(tx: Record): void { + validateBaseTransaction(tx) + + if (tx.XChainBridge == null) { + throw new ValidationError('XChainModifyBridge: missing field XChainBridge') + } + + if (tx.SignatureReward == null) { + throw new ValidationError( + 'XChainModifyBridge: missing field SignatureReward', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 0327bdb8..a47cca29 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -51,3 +51,4 @@ export { XChainCommit } from './XChainCommit' export { XChainCreateBridge } from './XChainCreateBridge' export { XChainCreateClaimID } from './XChainCreateClaimID' export { SidechainXChainAccountCreate } from './sidechainXChainAccountCreate' +export { XChainModifyBridge } from './XChainModifyBridge' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 466aa9b6..9c3ab8d4 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -68,6 +68,10 @@ import { XChainCreateClaimID, validateXChainCreateClaimID, } from './XChainCreateClaimID' +import { + XChainModifyBridge, + validateXChainModifyBridge, +} from './XChainModifyBridge' /** * @category Transaction Models @@ -103,6 +107,7 @@ export type Transaction = | XChainCreateBridge | XChainCreateClaimID | SidechainXChainAccountCreate + | XChainModifyBridge /** * @category Transaction Models @@ -251,6 +256,10 @@ export function validate(transaction: Record): void { validateSidechainXChainAccountCreate(tx) break + case 'XChainModifyBridge': + validateXChainModifyBridge(tx) + break + default: throw new ValidationError( `Invalid field TransactionType: ${tx.TransactionType}`, From b6ee50f726b3df7ec5eea0d0da434dbf42513eef Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 15 Aug 2022 12:46:51 +0200 Subject: [PATCH 23/70] update RPCs --- packages/xrpl/src/models/common/index.ts | 3 +- .../xrpl/src/models/methods/ledgerEntry.ts | 31 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index ede00ed8..89b42568 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -10,12 +10,13 @@ export type AccountObjectType = | 'signer_list' | 'ticket' | 'state' + | 'xchain_seq' interface XRP { currency: 'XRP' } -interface IssuedCurrency { +export interface IssuedCurrency { currency: string issuer: string } diff --git a/packages/xrpl/src/models/methods/ledgerEntry.ts b/packages/xrpl/src/models/methods/ledgerEntry.ts index b4203a45..48287a13 100644 --- a/packages/xrpl/src/models/methods/ledgerEntry.ts +++ b/packages/xrpl/src/models/methods/ledgerEntry.ts @@ -1,4 +1,4 @@ -import { LedgerIndex } from '../common' +import { IssuedCurrency, LedgerIndex } from '../common' import { LedgerEntry } from '../ledger' import { BaseRequest, BaseResponse } from './baseMethod' @@ -137,6 +137,35 @@ export interface LedgerEntryRequest extends BaseRequest { ticket_sequence: number } | string + + xchain_bridge?: + | { + locking_chain_door: string + locking_chain_issue: 'XRP' | IssuedCurrency + issuing_chain_door: string + issuing_chain_issue: 'XRP' | IssuedCurrency + } + | string + + xchain_claim_id?: + | { + locking_chain_door: string + locking_chain_issue: 'XRP' | IssuedCurrency + issuing_chain_door: string + issuing_chain_issue: 'XRP' | IssuedCurrency + xchain_claim_id: string | number + } + | string + + xchain_create_account_claim_id?: + | { + locking_chain_door: string + locking_chain_issue: 'XRP' | IssuedCurrency + issuing_chain_door: string + issuing_chain_issue: 'XRP' | IssuedCurrency + xchain_create_account_claim_id: string | number + } + | string } /** From 9de54dcea9f730f1a920e90f514390cbc5f06e42 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 26 Aug 2022 16:06:56 +0200 Subject: [PATCH 24/70] update to latest rippled --- .../src/enums/definitions.json | 26 +++++++++++++------ .../test/fixtures/codec-fixtures.json | 2 +- .../src/models/transactions/XChainCommit.ts | 2 ++ .../transactions/XChainCreateClaimID.ts | 6 ++--- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index e96439fe..a9774ce1 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -1849,7 +1849,7 @@ } ], [ - "OtherChainAccount", + "OtherChainSource", { "nth": 18, "isVLEncoded": true, @@ -1859,7 +1859,7 @@ } ], [ - "AttestationSignerAccount", + "OtherChainDestination", { "nth": 19, "isVLEncoded": true, @@ -1869,7 +1869,7 @@ } ], [ - "AttestationRewardAccount", + "AttestationSignerAccount", { "nth": 20, "isVLEncoded": true, @@ -1879,7 +1879,7 @@ } ], [ - "LockingChainDoor", + "AttestationRewardAccount", { "nth": 21, "isVLEncoded": true, @@ -1889,7 +1889,7 @@ } ], [ - "IssuingChainDoor", + "LockingChainDoor", { "nth": 22, "isVLEncoded": true, @@ -1898,6 +1898,16 @@ "type": "AccountID" } ], + [ + "IssuingChainDoor", + { + "nth": 23, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], [ "Indexes", { @@ -2610,13 +2620,14 @@ "tecXCHAIN_PROOF_UNKNOWN_KEY": 166, "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 167, "tecXCHAIN_CLAIM_ACCOUNT_DST_EXISTS": 168, - "tecXCHAIN_CLAIM_WRONG_CHAIN": 169, + "tecXCHAIN_WRONG_CHAIN": 169, "tecXCHAIN_REWARD_MISMATCH": 170, "tecXCHAIN_NO_SIGNERS_LIST": 171, "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 172, "tecXCHAIN_INSUFF_CREATE_AMOUNT": 173, "tecXCHAIN_ACCOUNT_CREATE_PAST": 174, - "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 175 + "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 175, + "tecXCHAIN_PAYMENT_FAILED": 176 }, "TRANSACTION_TYPES": { "Invalid": -1, @@ -2653,7 +2664,6 @@ "XChainCommit": 32, "XChainClaim": 33, "SidechainXChainAccountCreate": 34, - "SidechainXChainAccountClaim": 35, "XChainAddAttestation": 36, "XChainModifyBridge": 37, "EnableAmendment": 100, diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 29d3b7f1..5a2dc629 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4502,7 +4502,7 @@ }, "Fee": "10", "Flags": 2147483648, - "OtherChainAccount": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", + "OtherChainSource": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", "Sequence": 1, "SignatureReward": "10000", "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", diff --git a/packages/xrpl/src/models/transactions/XChainCommit.ts b/packages/xrpl/src/models/transactions/XChainCommit.ts index b3205e96..07019e74 100644 --- a/packages/xrpl/src/models/transactions/XChainCommit.ts +++ b/packages/xrpl/src/models/transactions/XChainCommit.ts @@ -14,6 +14,8 @@ export interface XChainCommit extends BaseTransaction { XChainClaimID: number | string + OtherChainDestination?: string + Amount: Amount } diff --git a/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts b/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts index ea90ed5d..24afe997 100644 --- a/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts +++ b/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts @@ -14,7 +14,7 @@ export interface XChainCreateClaimID extends BaseTransaction { SignatureReward: Amount - OtherChainAccount: string + OtherChainSource: string } /** @@ -36,9 +36,9 @@ export function validateXChainCreateClaimID(tx: Record): void { ) } - if (tx.OtherChainAccount == null) { + if (tx.OtherChainSource == null) { throw new ValidationError( - 'XChainCreateClaimID: missing field OtherChainAccount', + 'XChainCreateClaimID: missing field OtherChainSource', ) } } From 43bf4b9e14c51b048108a0ed8db1ec654b9279b8 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 26 Aug 2022 18:41:39 +0200 Subject: [PATCH 25/70] more fixes --- .../ripple-binary-codec/src/enums/definitions.json | 2 +- .../test/fixtures/codec-fixtures.json | 12 ++++++------ .../src/models/transactions/XChainAddAttestation.ts | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index a9774ce1..1db9e3be 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -1879,7 +1879,7 @@ } ], [ - "AttestationRewardAccount", + "AttestationSignerAccount", { "nth": 21, "isVLEncoded": true, diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 5a2dc629..bc87a428 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4573,7 +4573,7 @@ "XChainClaimAttestationBatchElement" : { "Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount" : "100000000", - "AttestationRewardAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "AttestationSignerAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Destination" : "r9A8UyNpW3X46FUc6P7JZqgn6WgAPjBwPg", "PublicKey" : "03DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0", "Signature" : "616263", @@ -4630,7 +4630,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "03ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B5", "Signature": "3044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A26", @@ -4643,7 +4643,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "02A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A15", "Signature": "304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED", @@ -4656,7 +4656,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "02F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC", "Signature": "30450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB2185428", @@ -4669,7 +4669,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "02498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D760592", "Signature": "3045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E", @@ -4682,7 +4682,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "03219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD817", "Signature": "3045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB21", diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index 5a6eb7a1..f6bd74fb 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -19,7 +19,7 @@ export interface XChainAddAttestation extends BaseTransaction { Amount: Amount - AttestationRewardAccount: string + AttestationSignerAccount: string Destination: string @@ -39,7 +39,7 @@ export interface XChainAddAttestation extends BaseTransaction { Amount: Amount - AttestationRewardAccount: string + AttestationSignerAccount: string Destination: string From 5f973669479bf49a91f5f74aa36dae08d259fa6c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 29 Aug 2022 21:17:37 +0300 Subject: [PATCH 26/70] fix definitions.json --- packages/ripple-binary-codec/src/enums/definitions.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 1db9e3be..34fc6b58 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -1879,7 +1879,7 @@ } ], [ - "AttestationSignerAccount", + "AttestationRewardAccount", { "nth": 21, "isVLEncoded": true, @@ -2627,7 +2627,8 @@ "tecXCHAIN_INSUFF_CREATE_AMOUNT": 173, "tecXCHAIN_ACCOUNT_CREATE_PAST": 174, "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 175, - "tecXCHAIN_PAYMENT_FAILED": 176 + "tecXCHAIN_PAYMENT_FAILED": 176, + "tecXCHAIN_SELF_COMMIT": 177 }, "TRANSACTION_TYPES": { "Invalid": -1, From ecffb1375a5b20c5aca95e6f1501b135d9ddd1ae Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 29 Aug 2022 21:27:43 +0300 Subject: [PATCH 27/70] fix spacing --- .../test/fixtures/codec-fixtures.json | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index bc87a428..a81b0ad8 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4562,27 +4562,27 @@ "TransactionType" : "XChainAddAttestation", "TxnSignature" : "3045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E2", "XChainAttestationBatch" : { - "XChainBridge" : { - "IssuingChainDoor" : "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", - "IssuingChainIssue" : "XRP", - "LockingChainDoor" : "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC", - "LockingChainIssue" : "XRP" + "XChainBridge" : { + "IssuingChainDoor" : "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", + "IssuingChainIssue" : "XRP", + "LockingChainDoor" : "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC", + "LockingChainIssue" : "XRP" }, "XChainClaimAttestationBatch" : [ - { - "XChainClaimAttestationBatchElement" : { - "Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount" : "100000000", - "AttestationSignerAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Destination" : "r9A8UyNpW3X46FUc6P7JZqgn6WgAPjBwPg", - "PublicKey" : "03DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0", - "Signature" : "616263", - "WasLockingChainSend" : 1, - "XChainClaimID" : "0000000000000000" - } + { + "XChainClaimAttestationBatchElement" : { + "Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Amount" : "100000000", + "AttestationSignerAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "Destination" : "r9A8UyNpW3X46FUc6P7JZqgn6WgAPjBwPg", + "PublicKey" : "03DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0", + "Signature" : "616263", + "WasLockingChainSend" : 1, + "XChainClaimID" : "0000000000000000" } - ], - "XChainCreateAccountAttestationBatch" : [] + } + ], + "XChainCreateAccountAttestationBatch" : [] } } }, @@ -4642,27 +4642,27 @@ { "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount": "1000000000", - "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", - "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", - "PublicKey": "02A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A15", - "Signature": "304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED", - "SignatureReward": "1000000", - "WasLockingChainSend": 1, - "XChainAccountCreateCount": "0000000000000001" + "Amount": "1000000000", + "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", + "PublicKey": "02A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A15", + "Signature": "304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED", + "SignatureReward": "1000000", + "WasLockingChainSend": 1, + "XChainAccountCreateCount": "0000000000000001" } }, { "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount": "1000000000", - "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", - "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", - "PublicKey": "02F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC", - "Signature": "30450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB2185428", - "SignatureReward": "1000000", - "WasLockingChainSend": 1, - "XChainAccountCreateCount": "0000000000000001" + "Amount": "1000000000", + "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", + "PublicKey": "02F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC", + "Signature": "30450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB2185428", + "SignatureReward": "1000000", + "WasLockingChainSend": 1, + "XChainAccountCreateCount": "0000000000000001" } }, { From 9fb741f6f50dee45fd86ce57bf79e1b2e33095f2 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 30 Aug 2022 20:53:00 +0300 Subject: [PATCH 28/70] update definitions.json to avoid conflict with amm --- .../src/enums/definitions.json | 18 +++++++++--------- .../test/fixtures/codec-fixtures.json | 12 ++++++------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 34fc6b58..3b608c63 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -1471,7 +1471,7 @@ [ "XChainFee", { - "nth": 20, + "nth": 28, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -1481,7 +1481,7 @@ [ "SignatureReward", { - "nth": 21, + "nth": 29, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -1491,7 +1491,7 @@ [ "MinAccountCreateAmount", { - "nth": 22, + "nth": 30, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -2221,7 +2221,7 @@ [ "XChainClaimProofSig", { - "nth": 25, + "nth": 32, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -2231,7 +2231,7 @@ [ "XChainCreateAccountProofSig", { - "nth": 26, + "nth": 33, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -2241,7 +2241,7 @@ [ "XChainAttestationBatchElement", { - "nth": 27, + "nth": 34, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -2251,7 +2251,7 @@ [ "XChainClaimAttestationBatchElement", { - "nth": 28, + "nth": 35, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -2261,7 +2261,7 @@ [ "XChainCreateAccountAttestationBatchElement", { - "nth": 29, + "nth": 36, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -2271,7 +2271,7 @@ [ "XChainAttestationBatchInner", { - "nth": 30, + "nth": 37, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index a81b0ad8..1d828dae 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4451,7 +4451,7 @@ } }, { - "binary": "12001E2200000000240000000168400000000000000A601540000000000003E86016400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A270918114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12001E2200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A270918114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4471,7 +4471,7 @@ } }, { - "binary": "1200252200000000240000000168400000000000000A601540000000000003E86016400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "1200252200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4491,7 +4491,7 @@ } }, { - "binary": "12001F2280000000240000000168400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12001F2280000000240000000168400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4552,7 +4552,7 @@ } }, { - "binary": "1200242280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E01C30140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", + "binary": "1200242280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E02330140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", "json": { "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee" : "10", @@ -4587,7 +4587,7 @@ } }, { - "binary": "120022228000000024000000016140000000000F424068400000000000000A6015400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "120022228000000024000000016140000000000F424068400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4608,7 +4608,7 @@ } }, { - "binary": "1200242280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E01D3015000000000000000161400000003B9ACA00601540000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", + "binary": "1200242280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee": "10", From 2065e6f040a35a8d5e17db8d2f433552a200861b Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 31 Aug 2022 17:06:03 +0300 Subject: [PATCH 29/70] update definitions.json to resolve amm conflicts --- .../src/enums/definitions.json | 71 +++++++++++-------- .../test/fixtures/codec-fixtures.json | 16 ++--- 2 files changed, 49 insertions(+), 38 deletions(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 3b608c63..ab19d79a 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -2522,13 +2522,15 @@ "temUNKNOWN": -264, "temSEQ_AND_TICKET": -263, "temBAD_NFTOKEN_TRANSFER_FEE": -262, - "temEQUAL_DOOR_ACCOUNTS": -261, - "temBAD_XCHAIN_PROOF": -260, - "temSIDECHAIN_BAD_ISSUES": -259, - "temSIDECHAIN_NONDOOR_OWNER": -258, - "temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT": -257, - "temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT": -256, - "temXCHAIN_TOO_MANY_ATTESTATIONS": -255, + "temBAD_AMM_OPTIONS": -261, + "temBAD_AMM_TOKENS": -260, + "temEQUAL_DOOR_ACCOUNTS": -259, + "temBAD_XCHAIN_PROOF": -258, + "temSIDECHAIN_BAD_ISSUES": -257, + "temSIDECHAIN_NONDOOR_OWNER": -256, + "temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT": -255, + "temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT": -254, + "temXCHAIN_TOO_MANY_ATTESTATIONS": -253, "tefFAILURE": -199, "tefALREADY": -198, @@ -2613,22 +2615,31 @@ "tecINSUFFICIENT_FUNDS": 159, "tecOBJECT_NOT_FOUND": 160, "tecINSUFFICIENT_PAYMENT": 161, - "tecBAD_XCHAIN_TRANSFER_ISSUE": 162, - "tecXCHAIN_NO_CLAIM_ID": 163, - "tecXCHAIN_BAD_CLAIM_ID": 164, - "tecXCHAIN_CLAIM_NO_QUORUM": 165, - "tecXCHAIN_PROOF_UNKNOWN_KEY": 166, - "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 167, - "tecXCHAIN_CLAIM_ACCOUNT_DST_EXISTS": 168, - "tecXCHAIN_WRONG_CHAIN": 169, - "tecXCHAIN_REWARD_MISMATCH": 170, - "tecXCHAIN_NO_SIGNERS_LIST": 171, - "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 172, - "tecXCHAIN_INSUFF_CREATE_AMOUNT": 173, - "tecXCHAIN_ACCOUNT_CREATE_PAST": 174, - "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 175, - "tecXCHAIN_PAYMENT_FAILED": 176, - "tecXCHAIN_SELF_COMMIT": 177 + "tecUNFUNDED_AMM": 162, + "tecAMM_BALANCE": 163, + "tecAMM_FAILED_DEPOSIT": 164, + "tecAMM_FAILED_WITHDRAW": 165, + "tecAMM_INVALID_TOKENS": 166, + "tecAMM_EXISTS": 167, + "tecAMM_FAILED_BID": 168, + "tecAMM_DIRECT_PAYMENT": 169, + "tecAMM_FAILED_VOTE": 170, + "tecBAD_XCHAIN_TRANSFER_ISSUE": 171, + "tecXCHAIN_NO_CLAIM_ID": 172, + "tecXCHAIN_BAD_CLAIM_ID": 173, + "tecXCHAIN_CLAIM_NO_QUORUM": 174, + "tecXCHAIN_PROOF_UNKNOWN_KEY": 175, + "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 176, + "tecXCHAIN_CLAIM_ACCOUNT_DST_EXISTS": 177, + "tecXCHAIN_WRONG_CHAIN": 178, + "tecXCHAIN_REWARD_MISMATCH": 179, + "tecXCHAIN_NO_SIGNERS_LIST": 180, + "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 181, + "tecXCHAIN_INSUFF_CREATE_AMOUNT": 182, + "tecXCHAIN_ACCOUNT_CREATE_PAST": 183, + "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 184, + "tecXCHAIN_PAYMENT_FAILED": 185, + "tecXCHAIN_SELF_COMMIT": 186 }, "TRANSACTION_TYPES": { "Invalid": -1, @@ -2660,13 +2671,13 @@ "NFTokenCreateOffer": 27, "NFTokenCancelOffer": 28, "NFTokenAcceptOffer": 29, - "XChainCreateBridge": 30, - "XChainCreateClaimID": 31, - "XChainCommit": 32, - "XChainClaim": 33, - "SidechainXChainAccountCreate": 34, - "XChainAddAttestation": 36, - "XChainModifyBridge": 37, + "XChainCreateBridge": 40, + "XChainCreateClaimID": 41, + "XChainCommit": 42, + "XChainClaim": 43, + "SidechainXChainAccountCreate": 44, + "XChainAddAttestation": 45, + "XChainModifyBridge": 46, "EnableAmendment": 100, "SetFee": 101, "UNLModify": 102 diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 1d828dae..d4accb48 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4451,7 +4451,7 @@ } }, { - "binary": "12001E2200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A270918114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "1200282200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A270918114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4471,7 +4471,7 @@ } }, { - "binary": "1200252200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002E2200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4491,7 +4491,7 @@ } }, { - "binary": "12001F2280000000240000000168400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "1200292280000000240000000168400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4511,7 +4511,7 @@ } }, { - "binary": "120020228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074453043021F177323F0D93612C82A4393A99B23905A7E675753FD80C52997AFAB13F5F9D002203BFFAF457E90BDA65AABE8F8762BD96162FAD98A0C030CCD69B06EE9B12BBFFE8114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002A228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074453043021F177323F0D93612C82A4393A99B23905A7E675753FD80C52997AFAB13F5F9D002203BFFAF457E90BDA65AABE8F8762BD96162FAD98A0C030CCD69B06EE9B12BBFFE8114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Amount": "10000", @@ -4531,7 +4531,7 @@ } }, { - "binary": "120021228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220445F7469FDA401787D9EE8A9B6E24DFF81E94F4C09FD311D2C0A58FCC02C684A022029E2EF34A5EA35F50D5BB57AC6320AD3AE12C13C8D1379B255A486D72CED142E8114B5F762798A53D543A014CAF8B297CFF8F2F937E88314550FC62003E785DC231A1058A05E56E3F09CF4E6011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002B228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220445F7469FDA401787D9EE8A9B6E24DFF81E94F4C09FD311D2C0A58FCC02C684A022029E2EF34A5EA35F50D5BB57AC6320AD3AE12C13C8D1379B255A486D72CED142E8114B5F762798A53D543A014CAF8B297CFF8F2F937E88314550FC62003E785DC231A1058A05E56E3F09CF4E6011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Amount": "10000", @@ -4552,7 +4552,7 @@ } }, { - "binary": "1200242280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E02330140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", + "binary": "12002D2280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E02330140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", "json": { "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee" : "10", @@ -4587,7 +4587,7 @@ } }, { - "binary": "120022228000000024000000016140000000000F424068400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002C228000000024000000016140000000000F424068400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4608,7 +4608,7 @@ } }, { - "binary": "1200242280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", + "binary": "12002D2280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee": "10", From 2dc665e125b0115a7a3e246316e93eafeb3c6a33 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 31 Aug 2022 17:31:44 +0300 Subject: [PATCH 30/70] audit code --- .../xrpl/src/models/transactions/XChainModifyBridge.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts index f81f52de..ba12acaa 100644 --- a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts +++ b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts @@ -12,7 +12,7 @@ export interface XChainModifyBridge extends BaseTransaction { XChainBridge: XChainBridge - SignatureReward: Amount + SignatureReward?: Amount MinAccountCreateAmount?: Amount } @@ -29,10 +29,4 @@ export function validateXChainModifyBridge(tx: Record): void { if (tx.XChainBridge == null) { throw new ValidationError('XChainModifyBridge: missing field XChainBridge') } - - if (tx.SignatureReward == null) { - throw new ValidationError( - 'XChainModifyBridge: missing field SignatureReward', - ) - } } From aa3443a347e5194ce8ed8b42e97acccd1f802cc9 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 31 Aug 2022 19:23:20 +0300 Subject: [PATCH 31/70] more updates --- .../src/enums/definitions.json | 19 ++----- .../test/fixtures/codec-fixtures.json | 18 +++--- .../transactions/XChainAccountCreateCommit.ts | 54 ++++++++++++++++++ .../xrpl/src/models/transactions/index.ts | 2 +- .../sidechainXChainAccountCreate.ts | 56 ------------------- .../src/models/transactions/transaction.ts | 12 ++-- 6 files changed, 74 insertions(+), 87 deletions(-) create mode 100644 packages/xrpl/src/models/transactions/XChainAccountCreateCommit.ts delete mode 100644 packages/xrpl/src/models/transactions/sidechainXChainAccountCreate.ts diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index ab19d79a..c90297ff 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -21,10 +21,9 @@ "UInt192": 21, "UInt384": 22, "UInt512": 23, - "XChainClaimProof": 24, - "Issue": 25, - "XChainBridge": 26, - "XChainAttestationBatch": 27, + "Issue": 24, + "XChainBridge": 25, + "XChainAttestationBatch": 26, "Transaction": 10001, "LedgerEntry": 10002, "Validation": 10003, @@ -1958,16 +1957,6 @@ "type": "PathSet" } ], - [ - "XChainClaimProof", - { - "nth": 1, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "XChainClaimProof" - } - ], [ "LockingChainIssue", { @@ -2675,7 +2664,7 @@ "XChainCreateClaimID": 41, "XChainCommit": 42, "XChainClaim": 43, - "SidechainXChainAccountCreate": 44, + "XChainAccountCreateCommit": 44, "XChainAddAttestation": 45, "XChainModifyBridge": 46, "EnableAmendment": 100, diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index d4accb48..c39ed30f 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4451,7 +4451,7 @@ } }, { - "binary": "1200282200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A270918114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "1200282200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A270918114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4471,7 +4471,7 @@ } }, { - "binary": "12002E2200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002E2200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4491,7 +4491,7 @@ } }, { - "binary": "1200292280000000240000000168400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "1200292280000000240000000168400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4511,7 +4511,7 @@ } }, { - "binary": "12002A228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074453043021F177323F0D93612C82A4393A99B23905A7E675753FD80C52997AFAB13F5F9D002203BFFAF457E90BDA65AABE8F8762BD96162FAD98A0C030CCD69B06EE9B12BBFFE8114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002A228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074453043021F177323F0D93612C82A4393A99B23905A7E675753FD80C52997AFAB13F5F9D002203BFFAF457E90BDA65AABE8F8762BD96162FAD98A0C030CCD69B06EE9B12BBFFE8114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Amount": "10000", @@ -4531,7 +4531,7 @@ } }, { - "binary": "12002B228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220445F7469FDA401787D9EE8A9B6E24DFF81E94F4C09FD311D2C0A58FCC02C684A022029E2EF34A5EA35F50D5BB57AC6320AD3AE12C13C8D1379B255A486D72CED142E8114B5F762798A53D543A014CAF8B297CFF8F2F937E88314550FC62003E785DC231A1058A05E56E3F09CF4E6011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002B228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220445F7469FDA401787D9EE8A9B6E24DFF81E94F4C09FD311D2C0A58FCC02C684A022029E2EF34A5EA35F50D5BB57AC6320AD3AE12C13C8D1379B255A486D72CED142E8114B5F762798A53D543A014CAF8B297CFF8F2F937E88314550FC62003E785DC231A1058A05E56E3F09CF4E6011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Amount": "10000", @@ -4552,7 +4552,7 @@ } }, { - "binary": "12002D2280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E02330140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", + "binary": "12002D2280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E02330140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", "json": { "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee" : "10", @@ -4587,7 +4587,7 @@ } }, { - "binary": "12002C228000000024000000016140000000000F424068400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011A14AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002C228000000024000000016140000000000F424068400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4603,12 +4603,12 @@ "Sequence": 1, "SignatureReward": "10000", "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", - "TransactionType": "SidechainXChainAccountCreate", + "TransactionType": "XChainAccountCreateCommit", "TxnSignature": "304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF18" } }, { - "binary": "12002D2280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011B14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", + "binary": "12002D2280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee": "10", diff --git a/packages/xrpl/src/models/transactions/XChainAccountCreateCommit.ts b/packages/xrpl/src/models/transactions/XChainAccountCreateCommit.ts new file mode 100644 index 00000000..1be25413 --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainAccountCreateCommit.ts @@ -0,0 +1,54 @@ +import { ValidationError } from '../../errors' +import { Amount, XChainBridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainAccountCreateCommit extends BaseTransaction { + TransactionType: 'XChainAccountCreateCommit' + + XChainBridge: XChainBridge + + SignatureReward: number | string + + Destination: string + + Amount: Amount +} + +/** + * Verify the form and type of a XChainAccountCreateCommit at runtime. + * + * @param tx - A XChainAccountCreateCommit Transaction. + * @throws When the XChainAccountCreateCommit is malformed. + */ +export function validateXChainAccountCreateCommit( + tx: Record, +): void { + validateBaseTransaction(tx) + + if (tx.XChainBridge == null) { + throw new ValidationError( + 'XChainAccountCreateCommit: missing field XChainBridge', + ) + } + + if (tx.SignatureReward == null) { + throw new ValidationError( + 'XChainAccountCreateCommit: missing field SignatureReward', + ) + } + + if (tx.Destination == null) { + throw new ValidationError( + 'XChainAccountCreateCommit: missing field Destination', + ) + } + + if (tx.Amount == null) { + throw new ValidationError('XChainAccountCreateCommit: missing field Amount') + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index a47cca29..a6b09ce0 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -50,5 +50,5 @@ export { XChainClaim } from './XChainClaim' export { XChainCommit } from './XChainCommit' export { XChainCreateBridge } from './XChainCreateBridge' export { XChainCreateClaimID } from './XChainCreateClaimID' -export { SidechainXChainAccountCreate } from './sidechainXChainAccountCreate' +export { XChainAccountCreateCommit } from './XChainAccountCreateCommit' export { XChainModifyBridge } from './XChainModifyBridge' diff --git a/packages/xrpl/src/models/transactions/sidechainXChainAccountCreate.ts b/packages/xrpl/src/models/transactions/sidechainXChainAccountCreate.ts deleted file mode 100644 index 4043be34..00000000 --- a/packages/xrpl/src/models/transactions/sidechainXChainAccountCreate.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { ValidationError } from '../../errors' -import { Amount, XChainBridge } from '../common' - -import { BaseTransaction, validateBaseTransaction } from './common' - -/** - * - * @category Transaction Models - */ -export interface SidechainXChainAccountCreate extends BaseTransaction { - TransactionType: 'SidechainXChainAccountCreate' - - XChainBridge: XChainBridge - - SignatureReward: number | string - - Destination: string - - Amount: Amount -} - -/** - * Verify the form and type of a SidechainXChainAccountCreate at runtime. - * - * @param tx - A SidechainXChainAccountCreate Transaction. - * @throws When the SidechainXChainAccountCreate is malformed. - */ -export function validateSidechainXChainAccountCreate( - tx: Record, -): void { - validateBaseTransaction(tx) - - if (tx.XChainBridge == null) { - throw new ValidationError( - 'SidechainXChainAccountCreate: missing field XChainBridge', - ) - } - - if (tx.SignatureReward == null) { - throw new ValidationError( - 'SidechainXChainAccountCreate: missing field SignatureReward', - ) - } - - if (tx.Destination == null) { - throw new ValidationError( - 'SidechainXChainAccountCreate: missing field Destination', - ) - } - - if (tx.Amount == null) { - throw new ValidationError( - 'SidechainXChainAccountCreate: missing field Amount', - ) - } -} diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 9c3ab8d4..0e3fcb62 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -48,9 +48,9 @@ import { } from './paymentChannelFund' import { SetRegularKey, validateSetRegularKey } from './setRegularKey' import { - SidechainXChainAccountCreate, - validateSidechainXChainAccountCreate, -} from './sidechainXChainAccountCreate' + XChainAccountCreateCommit, + validateXChainAccountCreateCommit, +} from './XChainAccountCreateCommit' import { SignerListSet, validateSignerListSet } from './signerListSet' import { TicketCreate, validateTicketCreate } from './ticketCreate' import { TrustSet, validateTrustSet } from './trustSet' @@ -106,7 +106,7 @@ export type Transaction = | XChainCommit | XChainCreateBridge | XChainCreateClaimID - | SidechainXChainAccountCreate + | XChainAccountCreateCommit | XChainModifyBridge /** @@ -252,8 +252,8 @@ export function validate(transaction: Record): void { validateXChainCreateClaimID(tx) break - case 'SidechainXChainAccountCreate': - validateSidechainXChainAccountCreate(tx) + case 'XChainAccountCreateCommit': + validateXChainAccountCreateCommit(tx) break case 'XChainModifyBridge': From c26235f424e0a6f20a4fd195d2c258934821a024 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 31 Aug 2022 19:48:11 +0300 Subject: [PATCH 32/70] fix renames --- .../test/fixtures/codec-fixtures.json | 16 ++++++++-------- .../models/transactions/XChainAddAttestation.ts | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index c39ed30f..c3bef700 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4552,7 +4552,7 @@ } }, { - "binary": "12002D2280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E02330140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28014142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", + "binary": "12002D2280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E02330140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28015142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", "json": { "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee" : "10", @@ -4573,7 +4573,7 @@ "XChainClaimAttestationBatchElement" : { "Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount" : "100000000", - "AttestationSignerAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", + "AttestationRewardAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Destination" : "r9A8UyNpW3X46FUc6P7JZqgn6WgAPjBwPg", "PublicKey" : "03DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0", "Signature" : "616263", @@ -4608,7 +4608,7 @@ } }, { - "binary": "12002D2280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801414A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", + "binary": "12002D2280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Fee": "10", @@ -4630,7 +4630,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "03ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B5", "Signature": "3044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A26", @@ -4643,7 +4643,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "02A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A15", "Signature": "304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED", @@ -4656,7 +4656,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "02F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC", "Signature": "30450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB2185428", @@ -4669,7 +4669,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "02498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D760592", "Signature": "3045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E", @@ -4682,7 +4682,7 @@ "XChainCreateAccountAttestationBatchElement": { "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", "Amount": "1000000000", - "AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", + "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", "PublicKey": "03219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD817", "Signature": "3045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB21", diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index f6bd74fb..5a6eb7a1 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -19,7 +19,7 @@ export interface XChainAddAttestation extends BaseTransaction { Amount: Amount - AttestationSignerAccount: string + AttestationRewardAccount: string Destination: string @@ -39,7 +39,7 @@ export interface XChainAddAttestation extends BaseTransaction { Amount: Amount - AttestationSignerAccount: string + AttestationRewardAccount: string Destination: string From d41954f00704561c0f24c6151874933275120d17 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 31 Aug 2022 19:57:08 +0300 Subject: [PATCH 33/70] fix linter --- packages/xrpl/src/models/transactions/transaction.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 0e3fcb62..3db4c35f 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -47,13 +47,13 @@ import { validatePaymentChannelFund, } from './paymentChannelFund' import { SetRegularKey, validateSetRegularKey } from './setRegularKey' +import { SignerListSet, validateSignerListSet } from './signerListSet' +import { TicketCreate, validateTicketCreate } from './ticketCreate' +import { TrustSet, validateTrustSet } from './trustSet' import { XChainAccountCreateCommit, validateXChainAccountCreateCommit, } from './XChainAccountCreateCommit' -import { SignerListSet, validateSignerListSet } from './signerListSet' -import { TicketCreate, validateTicketCreate } from './ticketCreate' -import { TrustSet, validateTrustSet } from './trustSet' import { XChainAddAttestation, validateXChainAddAttestation, From 9673a85ca644f016eb1fba920349f52e874f09bf Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 1 Sep 2022 11:11:25 +0300 Subject: [PATCH 34/70] update rpcs --- packages/xrpl/src/models/common/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index 89b42568..3013da25 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -10,7 +10,7 @@ export type AccountObjectType = | 'signer_list' | 'ticket' | 'state' - | 'xchain_seq' + | 'xchain_claim_id' interface XRP { currency: 'XRP' From bc50c6eb6606d0458de938d3b4addd4b1bd1814e Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 2 Sep 2022 14:12:26 +0300 Subject: [PATCH 35/70] switch to beta version --- package-lock.json | 6 +++--- packages/ripple-binary-codec/package.json | 2 +- packages/xrpl/package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index bc752f0e..a1f27473 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16948,7 +16948,7 @@ } }, "packages/ripple-binary-codec": { - "version": "1.4.2", + "version": "1.5.0-beta.0", "integrity": "sha512-XMRCbFXyG+dGp3x7tMs9IwA+FVWPPaGjdHYW2+g4Q/WQJqFp5MRED+jjOBOUafmrW4TUsOn1PEEdbB4ozWbDBw==", "license": "ISC", "dependencies": { @@ -16997,7 +16997,7 @@ "https-proxy-agent": "^5.0.0", "lodash": "^4.17.4", "ripple-address-codec": "^4.2.4", - "ripple-binary-codec": "^1.4.2", + "ripple-binary-codec": "^1.5.0-beta.0", "ripple-keypairs": "^1.1.4", "ws": "^8.2.2" }, @@ -29868,7 +29868,7 @@ "https-proxy-agent": "^5.0.0", "lodash": "^4.17.4", "ripple-address-codec": "^4.2.4", - "ripple-binary-codec": "^1.4.2", + "ripple-binary-codec": "^1.5.0-beta.0", "ripple-keypairs": "^1.1.4", "ws": "^8.2.2", "xrpl-local": "file:src" diff --git a/packages/ripple-binary-codec/package.json b/packages/ripple-binary-codec/package.json index c12fdc5e..56a2c423 100644 --- a/packages/ripple-binary-codec/package.json +++ b/packages/ripple-binary-codec/package.json @@ -1,6 +1,6 @@ { "name": "ripple-binary-codec", - "version": "1.4.2", + "version": "1.5.0-beta.0", "description": "XRP Ledger binary codec", "files": [ "dist/*", diff --git a/packages/xrpl/package.json b/packages/xrpl/package.json index e3bbdc81..48ca4d63 100644 --- a/packages/xrpl/package.json +++ b/packages/xrpl/package.json @@ -28,7 +28,7 @@ "https-proxy-agent": "^5.0.0", "lodash": "^4.17.4", "ripple-address-codec": "^4.2.4", - "ripple-binary-codec": "^1.4.2", + "ripple-binary-codec": "^1.5.0-beta.0", "ripple-keypairs": "^1.1.4", "ws": "^8.2.2" }, From 0196ccb0970b4f03560635b22c03ec242dd85e59 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 13 Sep 2022 11:37:52 -0700 Subject: [PATCH 36/70] fix copy-paste typo --- packages/xrpl/src/models/transactions/XChainAddAttestation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index 5a6eb7a1..b48260c9 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -34,7 +34,7 @@ export interface XChainAddAttestation extends BaseTransaction { }> XChainCreateAccountAttestationBatch: Array<{ - XChainClaimAttestationBatchElement: { + XChainCreateAccountAttestationBatchElement: { Account: string Amount: Amount From c1de808680cd451dd4554db6891874d1befb12e1 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 4 Oct 2022 15:03:55 -0400 Subject: [PATCH 37/70] add destination tag to XChainClaim --- packages/xrpl/src/models/transactions/XChainClaim.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/xrpl/src/models/transactions/XChainClaim.ts b/packages/xrpl/src/models/transactions/XChainClaim.ts index 29a00f7e..7f121a64 100644 --- a/packages/xrpl/src/models/transactions/XChainClaim.ts +++ b/packages/xrpl/src/models/transactions/XChainClaim.ts @@ -16,6 +16,8 @@ export interface XChainClaim extends BaseTransaction { Destination: string + DestinationTag?: number + Amount: Amount } From 96e97506f884a6ebe0b7c08147109013745b92f9 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 8 Nov 2022 22:17:57 -0500 Subject: [PATCH 38/70] rename IssuedCurrency -> Issue to match rippled --- .../ripple-binary-codec/src/types/index.ts | 4 +-- .../types/{issued-currency.ts => issue.ts} | 36 +++++++++---------- .../src/types/xchain-bridge.ts | 10 +++--- 3 files changed, 23 insertions(+), 27 deletions(-) rename packages/ripple-binary-codec/src/types/{issued-currency.ts => issue.ts} (69%) diff --git a/packages/ripple-binary-codec/src/types/index.ts b/packages/ripple-binary-codec/src/types/index.ts index c4096d5d..5204947a 100644 --- a/packages/ripple-binary-codec/src/types/index.ts +++ b/packages/ripple-binary-codec/src/types/index.ts @@ -11,7 +11,7 @@ import { Currency } from './currency' import { Hash128 } from './hash-128' import { Hash160 } from './hash-160' import { Hash256 } from './hash-256' -import { IssuedCurrency } from './issued-currency' +import { Issue } from './issue' import { PathSet } from './path-set' import { STArray } from './st-array' import { STObject } from './st-object' @@ -31,7 +31,7 @@ const coreTypes = { Hash128, Hash160, Hash256, - IssuedCurrency, + Issue, PathSet, STArray, STObject, diff --git a/packages/ripple-binary-codec/src/types/issued-currency.ts b/packages/ripple-binary-codec/src/types/issue.ts similarity index 69% rename from packages/ripple-binary-codec/src/types/issued-currency.ts rename to packages/ripple-binary-codec/src/types/issue.ts index b4419224..1537aa8c 100644 --- a/packages/ripple-binary-codec/src/types/issued-currency.ts +++ b/packages/ripple-binary-codec/src/types/issue.ts @@ -8,7 +8,7 @@ import { Buffer } from 'buffer/' /** * Interface for JSON objects that represent amounts */ -interface IssuedCurrencyObject extends JsonObject { +interface IssueObject extends JsonObject { currency: string issuer: string } @@ -16,7 +16,7 @@ interface IssuedCurrencyObject extends JsonObject { /** * Type guard for AmountObject */ -function isIssuedCurrencyObject(arg): arg is IssuedCurrencyObject { +function isIssueObject(arg): arg is IssueObject { const keys = Object.keys(arg).sort() return keys.length === 2 && keys[0] === 'currency' && keys[1] === 'issuer' } @@ -24,13 +24,11 @@ function isIssuedCurrencyObject(arg): arg is IssuedCurrencyObject { /** * Class for serializing/Deserializing Amounts */ -class IssuedCurrency extends SerializedType { - static readonly ZERO_ISSUED_CURRENCY: IssuedCurrency = new IssuedCurrency( - Buffer.alloc(20), - ) +class Issue extends SerializedType { + static readonly ZERO_ISSUED_CURRENCY: Issue = new Issue(Buffer.alloc(20)) constructor(bytes: Buffer) { - super(bytes ?? IssuedCurrency.ZERO_ISSUED_CURRENCY.bytes) + super(bytes ?? Issue.ZERO_ISSUED_CURRENCY.bytes) } /** @@ -40,25 +38,23 @@ class IssuedCurrency extends SerializedType { * representing an integer amount * @returns An Amount object */ - static from( - value: T, - ): IssuedCurrency { - if (value instanceof IssuedCurrency) { + static from(value: T): Issue { + if (value instanceof Issue) { return value } if (typeof value === 'string') { - IssuedCurrency.assertXrpIsValid(value) + Issue.assertXrpIsValid(value) const currency = Currency.from(value).toBytes() - return new IssuedCurrency(currency) + return new Issue(currency) } - if (isIssuedCurrencyObject(value)) { + if (isIssueObject(value)) { const currency = Currency.from(value.currency).toBytes() const issuer = AccountID.from(value.issuer).toBytes() - return new IssuedCurrency(Buffer.concat([currency, issuer])) + return new Issue(Buffer.concat([currency, issuer])) } throw new Error('Invalid type to construct an Amount') @@ -70,13 +66,13 @@ class IssuedCurrency extends SerializedType { * @param parser BinaryParser to read the Amount from * @returns An Amount object */ - static fromParser(parser: BinaryParser): IssuedCurrency { + static fromParser(parser: BinaryParser): Issue { const currency = parser.read(20) if (new Currency(currency).toJSON() === 'XRP') { - return new IssuedCurrency(currency) + return new Issue(currency) } const currencyAndIssuer = [currency, parser.read(20)] - return new IssuedCurrency(Buffer.concat(currencyAndIssuer)) + return new Issue(Buffer.concat(currencyAndIssuer)) } /** @@ -84,7 +80,7 @@ class IssuedCurrency extends SerializedType { * * @returns the JSON interpretation of this.bytes */ - toJSON(): IssuedCurrencyObject | string { + toJSON(): IssueObject | string { const parser = new BinaryParser(this.toString()) const currency = Currency.fromParser(parser) as Currency if (currency.toJSON() === 'XRP') { @@ -111,4 +107,4 @@ class IssuedCurrency extends SerializedType { } } -export { IssuedCurrency, IssuedCurrencyObject } +export { Issue, IssueObject } diff --git a/packages/ripple-binary-codec/src/types/xchain-bridge.ts b/packages/ripple-binary-codec/src/types/xchain-bridge.ts index 4870129a..82fd5125 100644 --- a/packages/ripple-binary-codec/src/types/xchain-bridge.ts +++ b/packages/ripple-binary-codec/src/types/xchain-bridge.ts @@ -3,16 +3,16 @@ import { BinaryParser } from '../serdes/binary-parser' import { AccountID } from './account-id' import { JsonObject, SerializedType } from './serialized-type' import { Buffer } from 'buffer/' -import { IssuedCurrency, IssuedCurrencyObject } from './issued-currency' +import { Issue, IssueObject } from './issue' /** * Interface for JSON objects that represent cross-chain bridges */ interface XChainBridgeObject extends JsonObject { LockingChainDoor: string - LockingChainIssue: IssuedCurrencyObject | string + LockingChainIssue: IssueObject | string IssuingChainDoor: string - IssuingChainIssue: IssuedCurrencyObject | string + IssuingChainIssue: IssueObject | string } /** @@ -45,9 +45,9 @@ class XChainBridge extends SerializedType { static readonly TYPE_ORDER: { name: string; type: typeof SerializedType }[] = [ { name: 'LockingChainDoor', type: AccountID }, - { name: 'LockingChainIssue', type: IssuedCurrency }, + { name: 'LockingChainIssue', type: Issue }, { name: 'IssuingChainDoor', type: AccountID }, - { name: 'IssuingChainIssue', type: IssuedCurrency }, + { name: 'IssuingChainIssue', type: Issue }, ] constructor(bytes: Buffer) { From 3268a29843d240a0cae5e26380bce4ae08e76558 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 16 Nov 2022 17:37:51 -0500 Subject: [PATCH 39/70] update Issue form --- .../ripple-binary-codec/src/types/issue.ts | 32 ++++++------------- .../test/fixtures/codec-fixtures.json | 32 +++++++++---------- packages/xrpl/src/models/common/index.ts | 4 +-- 3 files changed, 27 insertions(+), 41 deletions(-) diff --git a/packages/ripple-binary-codec/src/types/issue.ts b/packages/ripple-binary-codec/src/types/issue.ts index 1537aa8c..29bd160b 100644 --- a/packages/ripple-binary-codec/src/types/issue.ts +++ b/packages/ripple-binary-codec/src/types/issue.ts @@ -10,7 +10,7 @@ import { Buffer } from 'buffer/' */ interface IssueObject extends JsonObject { currency: string - issuer: string + issuer?: string } /** @@ -18,6 +18,9 @@ interface IssueObject extends JsonObject { */ function isIssueObject(arg): arg is IssueObject { const keys = Object.keys(arg).sort() + if (keys.length === 1) { + return keys[0] === 'currency' + } return keys.length === 2 && keys[0] === 'currency' && keys[1] === 'issuer' } @@ -43,16 +46,11 @@ class Issue extends SerializedType { return value } - if (typeof value === 'string') { - Issue.assertXrpIsValid(value) - - const currency = Currency.from(value).toBytes() - - return new Issue(currency) - } - if (isIssueObject(value)) { const currency = Currency.from(value.currency).toBytes() + if (value.issuer == null) { + return new Issue(currency) + } const issuer = AccountID.from(value.issuer).toBytes() return new Issue(Buffer.concat([currency, issuer])) } @@ -80,11 +78,11 @@ class Issue extends SerializedType { * * @returns the JSON interpretation of this.bytes */ - toJSON(): IssueObject | string { + toJSON(): IssueObject { const parser = new BinaryParser(this.toString()) const currency = Currency.fromParser(parser) as Currency if (currency.toJSON() === 'XRP') { - return currency.toJSON() + return { currency: currency.toJSON() } } const issuer = AccountID.fromParser(parser) as AccountID @@ -93,18 +91,6 @@ class Issue extends SerializedType { issuer: issuer.toJSON(), } } - - /** - * Validate XRP amount - * - * @param value String representing XRP amount - * @returns void, but will throw if invalid amount - */ - private static assertXrpIsValid(value: string): void { - if (value !== 'XRP') { - throw new Error(`${value} is an illegal amount`) - } - } } export { Issue, IssueObject } diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index c3bef700..dae22f7e 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4456,9 +4456,9 @@ "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": "XRP", + "LockingChainIssue": {"currency": "XRP"}, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": "XRP" + "IssuingChainIssue": {"currency": "XRP"} }, "Fee": "10", "Flags": 0, @@ -4476,9 +4476,9 @@ "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": "XRP", + "LockingChainIssue": {"currency": "XRP"}, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": "XRP" + "IssuingChainIssue": {"currency": "XRP"} }, "Fee": "10", "Flags": 0, @@ -4496,9 +4496,9 @@ "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": "XRP", + "LockingChainIssue": {"currency": "XRP"}, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": "XRP" + "IssuingChainIssue": {"currency": "XRP"} }, "Fee": "10", "Flags": 2147483648, @@ -4517,9 +4517,9 @@ "Amount": "10000", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": "XRP", + "LockingChainIssue": {"currency": "XRP"}, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": "XRP" + "IssuingChainIssue": {"currency": "XRP"} }, "Fee": "10", "Flags": 2147483648, @@ -4537,9 +4537,9 @@ "Amount": "10000", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": "XRP", + "LockingChainIssue": {"currency": "XRP"}, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": "XRP" + "IssuingChainIssue": {"currency": "XRP"} }, "Destination": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "Fee": "10", @@ -4564,9 +4564,9 @@ "XChainAttestationBatch" : { "XChainBridge" : { "IssuingChainDoor" : "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", - "IssuingChainIssue" : "XRP", + "IssuingChainIssue" : {"currency": "XRP"}, "LockingChainDoor" : "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC", - "LockingChainIssue" : "XRP" + "LockingChainIssue" : {"currency": "XRP"} }, "XChainClaimAttestationBatch" : [ { @@ -4592,9 +4592,9 @@ "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": "XRP", + "LockingChainIssue": {"currency": "XRP"}, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": "XRP" + "IssuingChainIssue": {"currency": "XRP"} }, "Amount": "1000000", "Fee": "10", @@ -4620,9 +4620,9 @@ "XChainAttestationBatch": { "XChainBridge": { "IssuingChainDoor": "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", - "IssuingChainIssue": "XRP", + "IssuingChainIssue": {"currency": "XRP"}, "LockingChainDoor": "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC", - "LockingChainIssue": "XRP" + "LockingChainIssue": {"currency": "XRP"} }, "XChainClaimAttestationBatch": [], "XChainCreateAccountAttestationBatch": [ diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index 3013da25..b8c874cc 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -128,7 +128,7 @@ export interface NFTOffer { export interface XChainBridge { LockingChainDoor: string - LockingChainIssue: 'XRP' | IssuedCurrency + LockingChainIssue: Currency IssuingChainDoor: string - IssuingChainIssue: 'XRP' | IssuedCurrency + IssuingChainIssue: Currency } From 0347e357eb2e259396f7200233a390393f70a1fc Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 16 Nov 2022 17:39:59 -0500 Subject: [PATCH 40/70] fix account object filters --- packages/xrpl/src/models/common/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index b8c874cc..6547acff 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -10,6 +10,7 @@ export type AccountObjectType = | 'signer_list' | 'ticket' | 'state' + | 'xchain_create_account_claim_id' | 'xchain_claim_id' interface XRP { From f570ac6f8c64ea3281104cc7e761eb7c466e3f3a Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 17 Nov 2022 12:28:29 -0500 Subject: [PATCH 41/70] fix issue from typing --- packages/ripple-binary-codec/src/types/issue.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ripple-binary-codec/src/types/issue.ts b/packages/ripple-binary-codec/src/types/issue.ts index 29bd160b..3c3925b9 100644 --- a/packages/ripple-binary-codec/src/types/issue.ts +++ b/packages/ripple-binary-codec/src/types/issue.ts @@ -41,7 +41,7 @@ class Issue extends SerializedType { * representing an integer amount * @returns An Amount object */ - static from(value: T): Issue { + static from(value: T): Issue { if (value instanceof Issue) { return value } From 86ab93a29940956da46750fa7e2819a69c979572 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 13 Dec 2022 10:05:30 -0500 Subject: [PATCH 42/70] fix LedgerEntry types --- packages/xrpl/src/models/methods/ledgerEntry.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/xrpl/src/models/methods/ledgerEntry.ts b/packages/xrpl/src/models/methods/ledgerEntry.ts index 48287a13..05edc3c3 100644 --- a/packages/xrpl/src/models/methods/ledgerEntry.ts +++ b/packages/xrpl/src/models/methods/ledgerEntry.ts @@ -1,4 +1,4 @@ -import { IssuedCurrency, LedgerIndex } from '../common' +import { Currency, LedgerIndex } from '../common' import { LedgerEntry } from '../ledger' import { BaseRequest, BaseResponse } from './baseMethod' @@ -141,18 +141,18 @@ export interface LedgerEntryRequest extends BaseRequest { xchain_bridge?: | { locking_chain_door: string - locking_chain_issue: 'XRP' | IssuedCurrency + locking_chain_issue: Currency issuing_chain_door: string - issuing_chain_issue: 'XRP' | IssuedCurrency + issuing_chain_issue: Currency } | string xchain_claim_id?: | { locking_chain_door: string - locking_chain_issue: 'XRP' | IssuedCurrency + locking_chain_issue: Currency issuing_chain_door: string - issuing_chain_issue: 'XRP' | IssuedCurrency + issuing_chain_issue: Currency xchain_claim_id: string | number } | string @@ -160,9 +160,9 @@ export interface LedgerEntryRequest extends BaseRequest { xchain_create_account_claim_id?: | { locking_chain_door: string - locking_chain_issue: 'XRP' | IssuedCurrency + locking_chain_issue: Currency issuing_chain_door: string - issuing_chain_issue: 'XRP' | IssuedCurrency + issuing_chain_issue: Currency xchain_create_account_claim_id: string | number } | string From 315a25b6f4b7e4cf8c989ec1b5d8c84e13b42275 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 9 Jan 2023 12:13:21 -0500 Subject: [PATCH 43/70] fix attestation destination type --- packages/xrpl/src/models/transactions/XChainAddAttestation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts index b48260c9..1ba9240e 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestation.ts @@ -21,7 +21,7 @@ export interface XChainAddAttestation extends BaseTransaction { AttestationRewardAccount: string - Destination: string + Destination?: string PublicKey: string From c056ca0cd9301e4be898c29575714cfe67fa5f09 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 2 Feb 2023 17:13:14 -0500 Subject: [PATCH 44/70] Update definitions.json --- packages/ripple-binary-codec/src/enums/definitions.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index c90297ff..89d50f99 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -2665,8 +2665,10 @@ "XChainCommit": 42, "XChainClaim": 43, "XChainAccountCreateCommit": 44, - "XChainAddAttestation": 45, - "XChainModifyBridge": 46, + "XChainAddAttestationBatch": 45, + "XChainAddClaimAttestation": 46, + "XChainAddAccountCreateAttestation": 47, + "XChainModifyBridge": 48, "EnableAmendment": 100, "SetFee": 101, "UNLModify": 102 From 81eb9668a0d82950a70eacb8842e3f1bf429470e Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 2 Feb 2023 17:16:46 -0500 Subject: [PATCH 45/70] fix tests --- .../ripple-binary-codec/test/fixtures/codec-fixtures.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index dae22f7e..4d88f6da 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4471,7 +4471,7 @@ } }, { - "binary": "12002E2200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "1200302200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { @@ -4559,7 +4559,7 @@ "Flags" : 2147483648, "Sequence" : 4, "SigningPubKey" : "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", - "TransactionType" : "XChainAddAttestation", + "TransactionType" : "XChainAddAttestationBatch", "TxnSignature" : "3045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E2", "XChainAttestationBatch" : { "XChainBridge" : { @@ -4615,7 +4615,7 @@ "Flags": 2147483648, "Sequence": 1, "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", - "TransactionType": "XChainAddAttestation", + "TransactionType": "XChainAddAttestationBatch", "TxnSignature": "304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC9535", "XChainAttestationBatch": { "XChainBridge": { From 6b20053f7ed08f80eba8724b37ae8615129db045 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 2 Feb 2023 17:19:51 -0500 Subject: [PATCH 46/70] rename XChainAddAttestation -> XChainAddAttestationBatch --- ...tation.ts => XChainAddAttestationBatch.ts} | 22 +++++++++---------- .../xrpl/src/models/transactions/index.ts | 2 +- .../src/models/transactions/transaction.ts | 12 +++++----- 3 files changed, 18 insertions(+), 18 deletions(-) rename packages/xrpl/src/models/transactions/{XChainAddAttestation.ts => XChainAddAttestationBatch.ts} (68%) diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAttestationBatch.ts similarity index 68% rename from packages/xrpl/src/models/transactions/XChainAddAttestation.ts rename to packages/xrpl/src/models/transactions/XChainAddAttestationBatch.ts index 1ba9240e..61d6f78a 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAttestationBatch.ts @@ -7,8 +7,8 @@ import { BaseTransaction, validateBaseTransaction } from './common' * * @category Transaction Models */ -export interface XChainAddAttestation extends BaseTransaction { - TransactionType: 'XChainAddAttestation' +export interface XChainAddAttestationBatch extends BaseTransaction { + TransactionType: 'XChainAddAttestationBatch' XChainAttestationBatch: { XChainBridge: XChainBridge @@ -56,25 +56,25 @@ export interface XChainAddAttestation extends BaseTransaction { } /** - * Verify the form and type of a XChainAddAttestation at runtime. + * Verify the form and type of a XChainAddAttestationBatch at runtime. * - * @param tx - A XChainAddAttestation Transaction. - * @throws When the XChainAddAttestation is malformed. + * @param tx - A XChainAddAttestationBatch Transaction. + * @throws When the XChainAddAttestationBatch is malformed. */ -export function validateXChainAddAttestation( +export function validateXChainAddAttestationBatch( tx: Record, ): void { validateBaseTransaction(tx) if (tx.XChainAttestationBatch == null) { throw new ValidationError( - 'XChainAddAttestation: missing field XChainAttestationBatch', + 'XChainAddAttestationBatch: missing field XChainAttestationBatch', ) } if (typeof tx.XChainAttestationBatch !== 'object') { throw new ValidationError( - 'XChainAddAttestation: XChainAttestationBatch must be an object', + 'XChainAddAttestationBatch: XChainAttestationBatch must be an object', ) } @@ -83,19 +83,19 @@ export function validateXChainAddAttestation( if (attestationBatch.XChainBridge == null) { throw new ValidationError( - 'XChainAddAttestation: missing field XChainAttestationBatch.XChainBridge', + 'XChainAddAttestationBatch: missing field XChainAttestationBatch.XChainBridge', ) } if (attestationBatch.XChainClaimAttestationBatch == null) { throw new ValidationError( - 'XChainAddAttestation: missing field XChainAttestationBatch.XChainClaimAttestationBatch', + 'XChainAddAttestationBatch: missing field XChainAttestationBatch.XChainClaimAttestationBatch', ) } if (attestationBatch.XChainCreateAccountAttestationBatch == null) { throw new ValidationError( - 'XChainAddAttestation: missing field XChainAttestationBatch.XChainCreateAccountAttestationBatch', + 'XChainAddAttestationBatch: missing field XChainAttestationBatch.XChainCreateAccountAttestationBatch', ) } } diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index a6b09ce0..8a543c48 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -45,7 +45,7 @@ export { SetRegularKey } from './setRegularKey' export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' -export { XChainAddAttestation } from './XChainAddAttestation' +export { XChainAddAttestationBatch } from './XChainAddAttestationBatch' export { XChainClaim } from './XChainClaim' export { XChainCommit } from './XChainCommit' export { XChainCreateBridge } from './XChainCreateBridge' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 3db4c35f..9de589df 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -55,9 +55,9 @@ import { validateXChainAccountCreateCommit, } from './XChainAccountCreateCommit' import { - XChainAddAttestation, - validateXChainAddAttestation, -} from './XChainAddAttestation' + XChainAddAttestationBatch, + validateXChainAddAttestationBatch, +} from './XChainAddAttestationBatch' import { XChainClaim, validateXChainClaim } from './XChainClaim' import { XChainCommit, validateXChainCommit } from './XChainCommit' import { @@ -101,7 +101,7 @@ export type Transaction = | SignerListSet | TicketCreate | TrustSet - | XChainAddAttestation + | XChainAddAttestationBatch | XChainClaim | XChainCommit | XChainCreateBridge @@ -232,8 +232,8 @@ export function validate(transaction: Record): void { validateTrustSet(tx) break - case 'XChainAddAttestation': - validateXChainAddAttestation(tx) + case 'XChainAddAttestationBatch': + validateXChainAddAttestationBatch(tx) break case 'XChainClaim': From c0c1507037806e0357ac107bbd0d5907b0a0e817 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 2 Feb 2023 17:24:03 -0500 Subject: [PATCH 47/70] add XChainAddClaimAttestation --- .../transactions/XChainAddClaimAttestation.ts | 48 +++++++++++++++++++ .../xrpl/src/models/transactions/index.ts | 1 + .../src/models/transactions/transaction.ts | 9 ++++ 3 files changed, 58 insertions(+) create mode 100644 packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts diff --git a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts new file mode 100644 index 00000000..6b5cfacc --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts @@ -0,0 +1,48 @@ +import { ValidationError } from '../../errors' +import { Amount, XChainBridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainAddClaimAttestation extends BaseTransaction { + TransactionType: 'XChainAddClaimAttestation' + + Account: string + + Amount: Amount + + AttestationRewardAccount: string + + Destination?: string + + PublicKey: string + + Signature: string + + WasLockingChainSend: 0 | 1 + + XChainBridge: XChainBridge + + XChainClaimID: string +} + +/** + * Verify the form and type of a XChainAddClaimAttestation at runtime. + * + * @param tx - A XChainAddClaimAttestation Transaction. + * @throws When the XChainAddClaimAttestation is malformed. + */ +export function validateXChainAddClaimAttestation( + tx: Record, +): void { + validateBaseTransaction(tx) + + if (tx.XChainBridge == null) { + throw new ValidationError( + 'XChainAddClaimAttestation: missing field tx.XChainBridge', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 8a543c48..097fe08c 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -46,6 +46,7 @@ export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' export { XChainAddAttestationBatch } from './XChainAddAttestationBatch' +export { XChainAddClaimAttestation } from './XChainAddClaimAttestation' export { XChainClaim } from './XChainClaim' export { XChainCommit } from './XChainCommit' export { XChainCreateBridge } from './XChainCreateBridge' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 9de589df..cb68060f 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -58,6 +58,10 @@ import { XChainAddAttestationBatch, validateXChainAddAttestationBatch, } from './XChainAddAttestationBatch' +import { + XChainAddClaimAttestation, + validateXChainAddClaimAttestation, +} from './XChainAddClaimAttestation' import { XChainClaim, validateXChainClaim } from './XChainClaim' import { XChainCommit, validateXChainCommit } from './XChainCommit' import { @@ -102,6 +106,7 @@ export type Transaction = | TicketCreate | TrustSet | XChainAddAttestationBatch + | XChainAddClaimAttestation | XChainClaim | XChainCommit | XChainCreateBridge @@ -236,6 +241,10 @@ export function validate(transaction: Record): void { validateXChainAddAttestationBatch(tx) break + case 'XChainAddClaimAttestation': + validateXChainAddClaimAttestation(tx) + break + case 'XChainClaim': validateXChainClaim(tx) break From 070413c9e8d2672d4a2e7745a08300ce88d90360 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 2 Feb 2023 17:32:04 -0500 Subject: [PATCH 48/70] add XChainAddAccountCreateAttestation --- .../XChainAddAccountCreateAttestation.ts | 79 +++++++++++++++++++ .../transactions/XChainAddClaimAttestation.ts | 2 + .../xrpl/src/models/transactions/index.ts | 1 + .../src/models/transactions/transaction.ts | 9 +++ 4 files changed, 91 insertions(+) create mode 100644 packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts diff --git a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts new file mode 100644 index 00000000..3774a26a --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts @@ -0,0 +1,79 @@ +import { ValidationError } from '../../errors' +import { Amount, XChainBridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainAddAccountCreateAttestation extends BaseTransaction { + TransactionType: 'XChainAddAccountCreateAttestation' + + Account: string + + Amount: Amount + + AttestationRewardAccount: string + + Destination: string + + OtherChainSource: string + + PublicKey: string + + Signature: string + + SignatureReward: Amount + + WasLockingChainSend: 0 | 1 + + XChainAccountCreateCount: string + + XChainBridge: XChainBridge +} + +/** + * Verify the form and type of a XChainAddAccountCreateAttestation at runtime. + * + * @param tx - A XChainAddAccountCreateAttestation Transaction. + * @throws When the XChainAddAccountCreateAttestation is malformed. + */ +export function validateXChainAddAccountCreateAttestation( + tx: Record, +): void { + validateBaseTransaction(tx) + + if (tx.XChainAttestationBatch == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field XChainAttestationBatch', + ) + } + + if (typeof tx.XChainAttestationBatch !== 'object') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: XChainAttestationBatch must be an object', + ) + } + + /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- known to be this */ + const attestationBatch = tx.XChainAttestationBatch as Record + + if (attestationBatch.XChainBridge == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field XChainAttestationBatch.XChainBridge', + ) + } + + if (attestationBatch.XChainClaimAttestationBatch == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field XChainAttestationBatch.XChainClaimAttestationBatch', + ) + } + + if (attestationBatch.XChainCreateAccountAttestationBatch == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field XChainAttestationBatch.XChainCreateAccountAttestationBatch', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts index 6b5cfacc..24ea03ac 100644 --- a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts @@ -18,6 +18,8 @@ export interface XChainAddClaimAttestation extends BaseTransaction { Destination?: string + OtherChainSource: string + PublicKey: string Signature: string diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 097fe08c..13a7668f 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -45,6 +45,7 @@ export { SetRegularKey } from './setRegularKey' export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' +export { XChainAddAccountCreateAttestation } from './XChainAddAccountCreateAttestation' export { XChainAddAttestationBatch } from './XChainAddAttestationBatch' export { XChainAddClaimAttestation } from './XChainAddClaimAttestation' export { XChainClaim } from './XChainClaim' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index cb68060f..2f3c0ff8 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -54,6 +54,10 @@ import { XChainAccountCreateCommit, validateXChainAccountCreateCommit, } from './XChainAccountCreateCommit' +import { + XChainAddAccountCreateAttestation, + validateXChainAddAccountCreateAttestation, +} from './XChainAddAccountCreateAttestation' import { XChainAddAttestationBatch, validateXChainAddAttestationBatch, @@ -105,6 +109,7 @@ export type Transaction = | SignerListSet | TicketCreate | TrustSet + | XChainAddAccountCreateAttestation | XChainAddAttestationBatch | XChainAddClaimAttestation | XChainClaim @@ -237,6 +242,10 @@ export function validate(transaction: Record): void { validateTrustSet(tx) break + case 'XChainAddAccountCreateAttestation': + validateXChainAddAccountCreateAttestation(tx) + break + case 'XChainAddAttestationBatch': validateXChainAddAttestationBatch(tx) break From d8930c5fb80731099ab8609bda398cfe43ab8112 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 6 Feb 2023 12:14:34 -0500 Subject: [PATCH 49/70] remove XChainAddAttestationBatch --- .../src/enums/definitions.json | 88 +++---------- .../test/fixtures/codec-fixtures.json | 123 ------------------ .../transactions/XChainAddAttestationBatch.ts | 101 -------------- .../xrpl/src/models/transactions/index.ts | 1 - .../src/models/transactions/transaction.ts | 9 -- 5 files changed, 18 insertions(+), 304 deletions(-) delete mode 100644 packages/xrpl/src/models/transactions/XChainAddAttestationBatch.ts diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 89d50f99..2c1e55db 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -1467,16 +1467,6 @@ "type": "Amount" } ], - [ - "XChainFee", - { - "nth": 28, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "Amount" - } - ], [ "SignatureReward", { @@ -1837,16 +1827,6 @@ "type": "AccountID" } ], - [ - "ThisChainAccount", - { - "nth": 17, - "isVLEncoded": true, - "isSerialized": true, - "isSigningField": true, - "type": "AccountID" - } - ], [ "OtherChainSource", { @@ -2228,7 +2208,7 @@ } ], [ - "XChainAttestationBatchElement", + "XChainClaimAttestationBatchElement", { "nth": 34, "isVLEncoded": false, @@ -2237,30 +2217,10 @@ "type": "STObject" } ], - [ - "XChainClaimAttestationBatchElement", - { - "nth": 35, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "STObject" - } - ], [ "XChainCreateAccountAttestationBatchElement", { - "nth": 36, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "STObject" - } - ], - [ - "XChainAttestationBatchInner", - { - "nth": 37, + "nth": 35, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -2408,7 +2368,7 @@ } ], [ - "XChainProofSigs", + "XChainClaimAttestationBatch", { "nth": 21, "isVLEncoded": false, @@ -2418,7 +2378,7 @@ } ], [ - "XChainClaimAttestationBatch", + "XChainCreateAccountAttestationBatch", { "nth": 22, "isVLEncoded": false, @@ -2428,7 +2388,7 @@ } ], [ - "XChainCreateAccountAttestationBatch", + "XChainClaimAttestations", { "nth": 23, "isVLEncoded": false, @@ -2437,20 +2397,10 @@ "type": "STArray" } ], - [ - "XChainClaimAttestations", - { - "nth": 24, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "STArray" - } - ], [ "XChainCreateAccountAttestations", { - "nth": 25, + "nth": 24, "isVLEncoded": false, "isSerialized": true, "isSigningField": true, @@ -2619,16 +2569,15 @@ "tecXCHAIN_CLAIM_NO_QUORUM": 174, "tecXCHAIN_PROOF_UNKNOWN_KEY": 175, "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 176, - "tecXCHAIN_CLAIM_ACCOUNT_DST_EXISTS": 177, - "tecXCHAIN_WRONG_CHAIN": 178, - "tecXCHAIN_REWARD_MISMATCH": 179, - "tecXCHAIN_NO_SIGNERS_LIST": 180, - "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 181, - "tecXCHAIN_INSUFF_CREATE_AMOUNT": 182, - "tecXCHAIN_ACCOUNT_CREATE_PAST": 183, - "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 184, - "tecXCHAIN_PAYMENT_FAILED": 185, - "tecXCHAIN_SELF_COMMIT": 186 + "tecXCHAIN_WRONG_CHAIN": 177, + "tecXCHAIN_REWARD_MISMATCH": 178, + "tecXCHAIN_NO_SIGNERS_LIST": 179, + "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 180, + "tecXCHAIN_INSUFF_CREATE_AMOUNT": 181, + "tecXCHAIN_ACCOUNT_CREATE_PAST": 182, + "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 183, + "tecXCHAIN_PAYMENT_FAILED": 184, + "tecXCHAIN_SELF_COMMIT": 185 }, "TRANSACTION_TYPES": { "Invalid": -1, @@ -2665,10 +2614,9 @@ "XChainCommit": 42, "XChainClaim": 43, "XChainAccountCreateCommit": 44, - "XChainAddAttestationBatch": 45, - "XChainAddClaimAttestation": 46, - "XChainAddAccountCreateAttestation": 47, - "XChainModifyBridge": 48, + "XChainAddClaimAttestation": 45, + "XChainAddAccountCreateAttestation": 46, + "XChainModifyBridge": 47, "EnableAmendment": 100, "SetFee": 101, "UNLModify": 102 diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 4d88f6da..d0925fa4 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4551,41 +4551,6 @@ "XChainClaimID": "0000000000000001" } }, - { - "binary": "12002D2280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E28114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000E02330140000000000000000614000000005F5E100712103DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0760361626381142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314621D345F8F094A085132431C69C89EC05D212CC28015142F3CC37C1D5616B3BBF1AABC49F6BFF46A92008700101301E1F1F1", - "json": { - "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", - "Fee" : "10", - "Flags" : 2147483648, - "Sequence" : 4, - "SigningPubKey" : "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", - "TransactionType" : "XChainAddAttestationBatch", - "TxnSignature" : "3045022100A6A8CA05B2B6CB60E0FD645A4DA0314D46D79D9FA3D63307FC997357366151B202202266CC23E2CA827905F37F78F54AD435F73A3B704EDD634B89201E23625CE2E2", - "XChainAttestationBatch" : { - "XChainBridge" : { - "IssuingChainDoor" : "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", - "IssuingChainIssue" : {"currency": "XRP"}, - "LockingChainDoor" : "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC", - "LockingChainIssue" : {"currency": "XRP"} - }, - "XChainClaimAttestationBatch" : [ - { - "XChainClaimAttestationBatchElement" : { - "Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount" : "100000000", - "AttestationRewardAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Destination" : "r9A8UyNpW3X46FUc6P7JZqgn6WgAPjBwPg", - "PublicKey" : "03DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0", - "Signature" : "616263", - "WasLockingChainSend" : 1, - "XChainClaimID" : "0000000000000000" - } - } - ], - "XChainCreateAccountAttestationBatch" : [] - } - } - }, { "binary": "12002C228000000024000000016140000000000F424068400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { @@ -4606,94 +4571,6 @@ "TransactionType": "XChainAccountCreateCommit", "TxnSignature": "304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF18" } - }, - { - "binary": "12002D2280000000240000000168400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207447304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC95358114B5F762798A53D543A014CAF8B297CFF8F2F937E8011A14C48CAD01682D7A86296EF14523074D4852C02EA9000000000000000000000000000000000000000014CC86E58C9B58D4CF71CB8C1B41F21BB290CE13D40000000000000000000000000000000000000000F1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B576463044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A2681142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A157646304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC764730450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB218542881142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712102498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D76059276473045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E81142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1E0243015000000000000000161400000003B9ACA00601D40000000000F4240712103219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD81776473045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB2181142F3CC37C1D5616B3BBF1AABC49F6BFF46A9200878314CA64525733C3BEED910CFE2AE280D3C078DABB4B801514A482A071D77722C2B683FFE01DC30134035E8E7200101301E1F1", - "json": { - "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", - "Fee": "10", - "Flags": 2147483648, - "Sequence": 1, - "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", - "TransactionType": "XChainAddAttestationBatch", - "TxnSignature": "304502210098F47661D8EF89CC2DFF3EAA92AF3843CEFD398EAD1E7496FAEAC269DE688FB80220143EBE519FC1936E884B1AFA047D4CB7CD2E2A28F0B27EC982D1BB3E63FC9535", - "XChainAttestationBatch": { - "XChainBridge": { - "IssuingChainDoor": "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt", - "IssuingChainIssue": {"currency": "XRP"}, - "LockingChainDoor": "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC", - "LockingChainIssue": {"currency": "XRP"} - }, - "XChainClaimAttestationBatch": [], - "XChainCreateAccountAttestationBatch": [ - { - "XChainCreateAccountAttestationBatchElement": { - "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", - "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", - "PublicKey": "03ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B5", - "Signature": "3044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D99CA7511FDFE352BB601F667A26", - "SignatureReward": "1000000", - "WasLockingChainSend": 1, - "XChainAccountCreateCount": "0000000000000001" - } - }, - { - "XChainCreateAccountAttestationBatchElement": { - "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", - "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", - "PublicKey": "02A14E886B3C3579FBAE3139F29728B903E6F4295AEE92160C8480695524D66A15", - "Signature": "304402200C3F5EEE2D7DCB609EE8558258E6AAF1EF823133C2B7C716E0DC9AAD2110F08D0220180E9F285CB2F78E362D37E947C000A8ED60A4BD8EFF21F74C5E529E1A8870ED", - "SignatureReward": "1000000", - "WasLockingChainSend": 1, - "XChainAccountCreateCount": "0000000000000001" - } - }, - { - "XChainCreateAccountAttestationBatchElement": { - "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", - "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", - "PublicKey": "02F7390DCF3352060847B81666EBAC79D52DEA2443BDF58439F75397C45334E2DC", - "Signature": "30450221008E31CFF0198F09CBA8610A946C23E170A3F11BCB8FC95D0D56C7B79A126D97D102203F4E952C449F2F01C4AF67FC37772A0D4459D770387CC11DBD5464FAB2185428", - "SignatureReward": "1000000", - "WasLockingChainSend": 1, - "XChainAccountCreateCount": "0000000000000001" - } - }, - { - "XChainCreateAccountAttestationBatchElement": { - "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", - "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", - "PublicKey": "02498BD8CD9CA6A4BA567A2ECFA163F118AFD30511CBBA71429C2EC2F74D760592", - "Signature": "3045022100F4E2D672F456CB9929EF01766AB72B42C71314A181232098563B8666E4EEA49C02203F936877E9DCC8FF5F7713579233985DF3DADB155F2BDA78FE3A4321373F370E", - "SignatureReward": "1000000", - "WasLockingChainSend": 1, - "XChainAccountCreateCount": "0000000000000001" - } - }, - { - "XChainCreateAccountAttestationBatchElement": { - "Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx", - "Amount": "1000000000", - "AttestationRewardAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f", - "Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC", - "PublicKey": "03219642288DEE8A3AA8FEA1F7DAE9ED4D9A9F0EADA1E2DE3DB56DD9598D9AD817", - "Signature": "3045022100D1BAFA57F40E16485310698B7B0BD0D4650E18782C4D65787A393CBB6D659EB802204EA28303089CCCD1463866A1BA0493A9B135AEA1EDFC8DD69A1A247DD9FEDB21", - "SignatureReward": "1000000", - "WasLockingChainSend": 1, - "XChainAccountCreateCount": "0000000000000001" - } - } - ] - } - } } ], "ledgerData": [{ diff --git a/packages/xrpl/src/models/transactions/XChainAddAttestationBatch.ts b/packages/xrpl/src/models/transactions/XChainAddAttestationBatch.ts deleted file mode 100644 index 61d6f78a..00000000 --- a/packages/xrpl/src/models/transactions/XChainAddAttestationBatch.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { ValidationError } from '../../errors' -import { Amount, XChainBridge } from '../common' - -import { BaseTransaction, validateBaseTransaction } from './common' - -/** - * - * @category Transaction Models - */ -export interface XChainAddAttestationBatch extends BaseTransaction { - TransactionType: 'XChainAddAttestationBatch' - - XChainAttestationBatch: { - XChainBridge: XChainBridge - - XChainClaimAttestationBatch: Array<{ - XChainClaimAttestationBatchElement: { - Account: string - - Amount: Amount - - AttestationRewardAccount: string - - Destination?: string - - PublicKey: string - - Signature: string - - WasLockingChainSend: 0 | 1 - - XChainClaimID: string - } - }> - - XChainCreateAccountAttestationBatch: Array<{ - XChainCreateAccountAttestationBatchElement: { - Account: string - - Amount: Amount - - AttestationRewardAccount: string - - Destination: string - - PublicKey: string - - Signature: string - - WasLockingChainSend: 0 | 1 - - XChainAccountCreateCount: string - } - }> - } -} - -/** - * Verify the form and type of a XChainAddAttestationBatch at runtime. - * - * @param tx - A XChainAddAttestationBatch Transaction. - * @throws When the XChainAddAttestationBatch is malformed. - */ -export function validateXChainAddAttestationBatch( - tx: Record, -): void { - validateBaseTransaction(tx) - - if (tx.XChainAttestationBatch == null) { - throw new ValidationError( - 'XChainAddAttestationBatch: missing field XChainAttestationBatch', - ) - } - - if (typeof tx.XChainAttestationBatch !== 'object') { - throw new ValidationError( - 'XChainAddAttestationBatch: XChainAttestationBatch must be an object', - ) - } - - /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- known to be this */ - const attestationBatch = tx.XChainAttestationBatch as Record - - if (attestationBatch.XChainBridge == null) { - throw new ValidationError( - 'XChainAddAttestationBatch: missing field XChainAttestationBatch.XChainBridge', - ) - } - - if (attestationBatch.XChainClaimAttestationBatch == null) { - throw new ValidationError( - 'XChainAddAttestationBatch: missing field XChainAttestationBatch.XChainClaimAttestationBatch', - ) - } - - if (attestationBatch.XChainCreateAccountAttestationBatch == null) { - throw new ValidationError( - 'XChainAddAttestationBatch: missing field XChainAttestationBatch.XChainCreateAccountAttestationBatch', - ) - } -} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 13a7668f..492739e3 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -46,7 +46,6 @@ export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' export { XChainAddAccountCreateAttestation } from './XChainAddAccountCreateAttestation' -export { XChainAddAttestationBatch } from './XChainAddAttestationBatch' export { XChainAddClaimAttestation } from './XChainAddClaimAttestation' export { XChainClaim } from './XChainClaim' export { XChainCommit } from './XChainCommit' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 2f3c0ff8..dc0219de 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -58,10 +58,6 @@ import { XChainAddAccountCreateAttestation, validateXChainAddAccountCreateAttestation, } from './XChainAddAccountCreateAttestation' -import { - XChainAddAttestationBatch, - validateXChainAddAttestationBatch, -} from './XChainAddAttestationBatch' import { XChainAddClaimAttestation, validateXChainAddClaimAttestation, @@ -110,7 +106,6 @@ export type Transaction = | TicketCreate | TrustSet | XChainAddAccountCreateAttestation - | XChainAddAttestationBatch | XChainAddClaimAttestation | XChainClaim | XChainCommit @@ -246,10 +241,6 @@ export function validate(transaction: Record): void { validateXChainAddAccountCreateAttestation(tx) break - case 'XChainAddAttestationBatch': - validateXChainAddAttestationBatch(tx) - break - case 'XChainAddClaimAttestation': validateXChainAddClaimAttestation(tx) break From 764f8d7b5e8f0e2c6d7740168cb28a693bffb046 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 6 Feb 2023 12:16:12 -0500 Subject: [PATCH 50/70] fix tests --- packages/ripple-binary-codec/test/fixtures/codec-fixtures.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index d0925fa4..140f7dec 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4471,7 +4471,7 @@ } }, { - "binary": "1200302200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", + "binary": "12002F2200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000", "json": { "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { From 2cb81b21efb78279b2fc7fd13b368a06ccc4548a Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 7 Feb 2023 15:14:58 -0500 Subject: [PATCH 51/70] update definitions --- .../src/enums/definitions.json | 11 -- .../ripple-binary-codec/src/types/index.ts | 2 - .../src/types/xchain-attestation-batch.ts | 118 ------------------ 3 files changed, 131 deletions(-) delete mode 100644 packages/ripple-binary-codec/src/types/xchain-attestation-batch.ts diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 2c1e55db..1f0f4ec2 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -23,7 +23,6 @@ "UInt512": 23, "Issue": 24, "XChainBridge": 25, - "XChainAttestationBatch": 26, "Transaction": 10001, "LedgerEntry": 10002, "Validation": 10003, @@ -1967,16 +1966,6 @@ "type": "XChainBridge" } ], - [ - "XChainAttestationBatch", - { - "nth": 1, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "XChainAttestationBatch" - } - ], [ "TransactionMetaData", { diff --git a/packages/ripple-binary-codec/src/types/index.ts b/packages/ripple-binary-codec/src/types/index.ts index 5204947a..37c2c478 100644 --- a/packages/ripple-binary-codec/src/types/index.ts +++ b/packages/ripple-binary-codec/src/types/index.ts @@ -20,7 +20,6 @@ import { UInt32 } from './uint-32' import { UInt64 } from './uint-64' import { UInt8 } from './uint-8' import { Vector256 } from './vector-256' -import { XChainAttestationBatch } from './xchain-attestation-batch' import { XChainBridge } from './xchain-bridge' const coreTypes = { @@ -40,7 +39,6 @@ const coreTypes = { UInt32, UInt64, Vector256, - XChainAttestationBatch, XChainBridge, } diff --git a/packages/ripple-binary-codec/src/types/xchain-attestation-batch.ts b/packages/ripple-binary-codec/src/types/xchain-attestation-batch.ts deleted file mode 100644 index fc6b0bbd..00000000 --- a/packages/ripple-binary-codec/src/types/xchain-attestation-batch.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { BinaryParser } from '../serdes/binary-parser' - -import { JsonObject, SerializedType } from './serialized-type' -import { Buffer } from 'buffer/' -import { XChainBridge, XChainBridgeObject } from './xchain-bridge' -import { STArray } from './st-array' - -/** - * Interface for JSON objects that represent cross-chain attestations - */ -interface XChainAttestationBatchObject extends JsonObject { - XChainBridge: XChainBridgeObject - XChainClaimAttestationBatch: JsonObject[] - XChainCreateAccountAttestationBatch: JsonObject[] -} - -/** - * Type guard for XChainAttestationBatchObject - */ -function isXChainAttestationBatchObject( - arg, -): arg is XChainAttestationBatchObject { - const keys = Object.keys(arg).sort() - return ( - keys.length === 3 && - keys[0] === 'XChainBridge' && - keys[1] === 'XChainClaimAttestationBatch' && - keys[2] === 'XChainCreateAccountAttestationBatch' - ) -} - -/** - * Class for serializing/deserializing XChainAttestationBatchs - */ -class XChainAttestationBatch extends SerializedType { - static readonly ZERO_XCHAIN_ATTESTATION_BATCH: XChainAttestationBatch = - new XChainAttestationBatch( - Buffer.concat([ - Buffer.from([0x14]), - Buffer.alloc(40), - Buffer.from([0x14]), - Buffer.alloc(40), - ]), - ) - - static readonly TYPE_ORDER: { name: string; type: typeof SerializedType }[] = - [ - { name: 'XChainBridge', type: XChainBridge }, - { name: 'XChainClaimAttestationBatch', type: STArray }, - { name: 'XChainCreateAccountAttestationBatch', type: STArray }, - ] - - constructor(bytes: Buffer) { - super(bytes ?? XChainAttestationBatch.ZERO_XCHAIN_ATTESTATION_BATCH.bytes) - } - - /** - * Construct a cross-chain bridge from a JSON - * - * @param value XChainAttestationBatch or JSON to parse into a XChainAttestationBatch - * @returns A XChainAttestationBatch object - */ - static from( - value: T, - ): XChainAttestationBatch { - if (value instanceof XChainAttestationBatch) { - return value - } - - if (isXChainAttestationBatchObject(value)) { - const bytes: Array = [] - this.TYPE_ORDER.forEach((item) => { - const { name, type } = item - const object = type.from(value[name]) - bytes.push(object.toBytes()) - }) - return new XChainAttestationBatch(Buffer.concat(bytes)) - } - - throw new Error('Invalid type to construct a XChainAttestationBatch') - } - - /** - * Read a XChainAttestationBatch from a BinaryParser - * - * @param parser BinaryParser to read the XChainAttestationBatch from - * @returns A XChainAttestationBatch object - */ - static fromParser(parser: BinaryParser): XChainAttestationBatch { - const bytes: Array = [] - - this.TYPE_ORDER.forEach((item) => { - const { type } = item - const object = type.fromParser(parser) - bytes.push(object.toBytes()) - }) - - return new XChainAttestationBatch(Buffer.concat(bytes)) - } - - /** - * Get the JSON representation of this XChainAttestationBatch - * - * @returns the JSON interpretation of this.bytes - */ - toJSON(): XChainAttestationBatchObject { - const parser = new BinaryParser(this.toString()) - const json = {} - XChainAttestationBatch.TYPE_ORDER.forEach((item) => { - const { name, type } = item - const object = type.fromParser(parser).toJSON() - json[name] = object - }) - return json as XChainAttestationBatchObject - } -} - -export { XChainAttestationBatch, XChainAttestationBatchObject } From 33b02ee70a8693f4eb677c3d012101e853300575 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 7 Feb 2023 15:15:31 -0500 Subject: [PATCH 52/70] fix attestation txns --- .../XChainAddAccountCreateAttestation.ts | 33 ++----------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts index 3774a26a..207eaafa 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts @@ -10,8 +10,6 @@ import { BaseTransaction, validateBaseTransaction } from './common' export interface XChainAddAccountCreateAttestation extends BaseTransaction { TransactionType: 'XChainAddAccountCreateAttestation' - Account: string - Amount: Amount AttestationRewardAccount: string @@ -44,36 +42,9 @@ export function validateXChainAddAccountCreateAttestation( ): void { validateBaseTransaction(tx) - if (tx.XChainAttestationBatch == null) { + if (tx.XChainBridge == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field XChainAttestationBatch', - ) - } - - if (typeof tx.XChainAttestationBatch !== 'object') { - throw new ValidationError( - 'XChainAddAccountCreateAttestation: XChainAttestationBatch must be an object', - ) - } - - /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- known to be this */ - const attestationBatch = tx.XChainAttestationBatch as Record - - if (attestationBatch.XChainBridge == null) { - throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field XChainAttestationBatch.XChainBridge', - ) - } - - if (attestationBatch.XChainClaimAttestationBatch == null) { - throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field XChainAttestationBatch.XChainClaimAttestationBatch', - ) - } - - if (attestationBatch.XChainCreateAccountAttestationBatch == null) { - throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field XChainAttestationBatch.XChainCreateAccountAttestationBatch', + 'XChainAddAccountCreateAttestation: missing field tx.XChainBridge', ) } } From 6ca13bc8dc9b0dc20f4ae94928ed279375d78e4f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 7 Feb 2023 15:18:25 -0500 Subject: [PATCH 53/70] fix attestation object --- .../xrpl/src/models/transactions/XChainAddClaimAttestation.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts index 24ea03ac..b2e2deb3 100644 --- a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts @@ -10,8 +10,6 @@ import { BaseTransaction, validateBaseTransaction } from './common' export interface XChainAddClaimAttestation extends BaseTransaction { TransactionType: 'XChainAddClaimAttestation' - Account: string - Amount: Amount AttestationRewardAccount: string From 82d0d12d8187caabaddcbf72a63ecede1ee36a87 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 7 Feb 2023 15:25:04 -0500 Subject: [PATCH 54/70] add validate for new txs --- .../XChainAddAccountCreateAttestation.ts | 54 ++++++++++++++++++ .../transactions/XChainAddClaimAttestation.ts | 56 ++++++++++++++++++- 2 files changed, 109 insertions(+), 1 deletion(-) diff --git a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts index 207eaafa..99cee911 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts @@ -42,6 +42,60 @@ export function validateXChainAddAccountCreateAttestation( ): void { validateBaseTransaction(tx) + if (tx.Amount == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.Amount', + ) + } + + if (tx.AttestationRewardAccount == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.AttestationRewardAccount', + ) + } + + if (tx.Destination == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.Destination', + ) + } + + if (tx.OtherChainSource == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.OtherChainSource', + ) + } + + if (tx.PublicKey == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.PublicKey', + ) + } + + if (tx.Signature == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.Signature', + ) + } + + if (tx.SignatureReward == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.SignatureReward', + ) + } + + if (tx.WasLockingChainSend == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.WasLockingChainSend', + ) + } + + if (tx.XChainAccountCreateCount == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.XChainAccountCreateCount', + ) + } + if (tx.XChainBridge == null) { throw new ValidationError( 'XChainAddAccountCreateAttestation: missing field tx.XChainBridge', diff --git a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts index b2e2deb3..f59222fc 100644 --- a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts @@ -40,9 +40,63 @@ export function validateXChainAddClaimAttestation( ): void { validateBaseTransaction(tx) + if (tx.Amount == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.Amount', + ) + } + + if (tx.AttestationRewardAccount == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.AttestationRewardAccount', + ) + } + + if (tx.Destination != null && typeof tx.Destination !== 'string') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field tx.Destination', + ) + } + + if (tx.OtherChainSource == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.OtherChainSource', + ) + } + + if (tx.PublicKey == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.PublicKey', + ) + } + + if (tx.Signature == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.Signature', + ) + } + + if (tx.WasLockingChainSend == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.WasLockingChainSend', + ) + } + + if (tx.XChainAccountCreateCount == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.XChainAccountCreateCount', + ) + } + if (tx.XChainBridge == null) { throw new ValidationError( - 'XChainAddClaimAttestation: missing field tx.XChainBridge', + 'XChainAddAccountCreateAttestation: missing field tx.XChainBridge', + ) + } + + if (tx.XChainClaimID == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field tx.XChainClaimID', ) } } From 61afad39c691e1f8666805fb2270e44acce0ef84 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 7 Feb 2023 15:33:58 -0500 Subject: [PATCH 55/70] fix linter warnings --- .../src/models/transactions/XChainAddAccountCreateAttestation.ts | 1 + .../xrpl/src/models/transactions/XChainAddClaimAttestation.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts index 99cee911..fd253141 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts @@ -37,6 +37,7 @@ export interface XChainAddAccountCreateAttestation extends BaseTransaction { * @param tx - A XChainAddAccountCreateAttestation Transaction. * @throws When the XChainAddAccountCreateAttestation is malformed. */ +// eslint-disable-next-line max-lines-per-function, complexity -- needed export function validateXChainAddAccountCreateAttestation( tx: Record, ): void { diff --git a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts index f59222fc..1abca52e 100644 --- a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts @@ -35,6 +35,7 @@ export interface XChainAddClaimAttestation extends BaseTransaction { * @param tx - A XChainAddClaimAttestation Transaction. * @throws When the XChainAddClaimAttestation is malformed. */ +// eslint-disable-next-line max-lines-per-function, complexity -- needed export function validateXChainAddClaimAttestation( tx: Record, ): void { From c3bb4d9b72f4861a8345b1355d9ecd42354ea985 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 14 Feb 2023 14:43:11 -0500 Subject: [PATCH 56/70] add Bridge ledger object --- packages/xrpl/src/models/ledger/Bridge.ts | 36 +++++++++++++++++++++++ packages/xrpl/src/models/ledger/index.ts | 2 ++ 2 files changed, 38 insertions(+) create mode 100644 packages/xrpl/src/models/ledger/Bridge.ts diff --git a/packages/xrpl/src/models/ledger/Bridge.ts b/packages/xrpl/src/models/ledger/Bridge.ts new file mode 100644 index 00000000..b5d25bf4 --- /dev/null +++ b/packages/xrpl/src/models/ledger/Bridge.ts @@ -0,0 +1,36 @@ +import { Amount, XChainBridge } from '../common' + +import BaseLedgerEntry from './BaseLedgerEntry' + +export default interface Bridge extends BaseLedgerEntry { + LedgerEntryType: 'Bridge' + + Account: string + + SignatureReward: Amount + + MinAccountCreateAmount?: string + + XChainBridge: XChainBridge + + XChainClaimID: string + + XChainAccountCreateCount: number + + XChainAccountClaimCount: Amount + /** + * A hint indicating which page of the sender's owner directory links to this + * object, in case the directory consists of multiple pages. + */ + OwnerNode: string + /** + * The identifying hash of the transaction that most recently modified this + * object. + */ + PreviousTxnID: string + /** + * The index of the ledger that contains the transaction that most recently + * modified this object. + */ + PreviousTxnLgrSeq: number +} diff --git a/packages/xrpl/src/models/ledger/index.ts b/packages/xrpl/src/models/ledger/index.ts index fbb31d40..4df0a8a9 100644 --- a/packages/xrpl/src/models/ledger/index.ts +++ b/packages/xrpl/src/models/ledger/index.ts @@ -3,6 +3,7 @@ import AccountRoot, { AccountRootFlagsInterface, } from './AccountRoot' import Amendments from './Amendments' +import Bridge from './Bridge' import Check from './Check' import DepositPreauth from './DepositPreauth' import DirectoryNode from './DirectoryNode' @@ -23,6 +24,7 @@ export { AccountRootFlags, AccountRootFlagsInterface, Amendments, + Bridge, Check, DepositPreauth, DirectoryNode, From 218ca41df3f62cd5616c4331219a86ec51912f22 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 14 Feb 2023 14:53:10 -0500 Subject: [PATCH 57/70] add XChainOwnedClaimID ledger object --- packages/xrpl/src/models/ledger/Bridge.ts | 5 +++ .../src/models/ledger/XChainOwnedClaimID.ts | 40 +++++++++++++++++++ packages/xrpl/src/models/ledger/index.ts | 2 + 3 files changed, 47 insertions(+) create mode 100644 packages/xrpl/src/models/ledger/XChainOwnedClaimID.ts diff --git a/packages/xrpl/src/models/ledger/Bridge.ts b/packages/xrpl/src/models/ledger/Bridge.ts index b5d25bf4..6b897309 100644 --- a/packages/xrpl/src/models/ledger/Bridge.ts +++ b/packages/xrpl/src/models/ledger/Bridge.ts @@ -18,6 +18,11 @@ export default interface Bridge extends BaseLedgerEntry { XChainAccountCreateCount: number XChainAccountClaimCount: Amount + /** + * A bit-map of boolean flags. No flags are defined for Bridges, so this value + * is always 0. + */ + Flags: 0 /** * A hint indicating which page of the sender's owner directory links to this * object, in case the directory consists of multiple pages. diff --git a/packages/xrpl/src/models/ledger/XChainOwnedClaimID.ts b/packages/xrpl/src/models/ledger/XChainOwnedClaimID.ts new file mode 100644 index 00000000..be1d5532 --- /dev/null +++ b/packages/xrpl/src/models/ledger/XChainOwnedClaimID.ts @@ -0,0 +1,40 @@ +import { XChainBridge } from '../common' + +import BaseLedgerEntry from './BaseLedgerEntry' + +export default interface XChainOwnedClaimID extends BaseLedgerEntry { + LedgerEntryType: 'XChainOwnedClaimID' + + Account: string + + XChainBridge: XChainBridge + + XChainClaimID: string + + OtherChainSource: string + // TODO: type this better + XChainClaimAttestations: object[] + + SignatureReward: string + + /** + * A bit-map of boolean flags. No flags are defined for XChainOwnedClaimIDs, + * so this value is always 0. + */ + Flags: 0 + /** + * A hint indicating which page of the sender's owner directory links to this + * object, in case the directory consists of multiple pages. + */ + OwnerNode: string + /** + * The identifying hash of the transaction that most recently modified this + * object. + */ + PreviousTxnID: string + /** + * The index of the ledger that contains the transaction that most recently + * modified this object. + */ + PreviousTxnLgrSeq: number +} diff --git a/packages/xrpl/src/models/ledger/index.ts b/packages/xrpl/src/models/ledger/index.ts index 4df0a8a9..b4894753 100644 --- a/packages/xrpl/src/models/ledger/index.ts +++ b/packages/xrpl/src/models/ledger/index.ts @@ -18,6 +18,7 @@ import PayChannel from './PayChannel' import RippleState, { RippleStateFlags } from './RippleState' import SignerList, { SignerListFlags } from './SignerList' import Ticket from './Ticket' +import XChainOwnedClaimID from './XChainOwnedClaimID' export { AccountRoot, @@ -42,4 +43,5 @@ export { SignerList, SignerListFlags, Ticket, + XChainOwnedClaimID, } From 6c03eec61b97925f19e0b386f8955c5c07db5021 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 14 Feb 2023 14:55:50 -0500 Subject: [PATCH 58/70] add XChainOwnedCreateAccountClaimID ledger object --- .../ledger/XChainOwnedCreateAccountClaimID.ts | 37 +++++++++++++++++++ packages/xrpl/src/models/ledger/index.ts | 2 + 2 files changed, 39 insertions(+) create mode 100644 packages/xrpl/src/models/ledger/XChainOwnedCreateAccountClaimID.ts diff --git a/packages/xrpl/src/models/ledger/XChainOwnedCreateAccountClaimID.ts b/packages/xrpl/src/models/ledger/XChainOwnedCreateAccountClaimID.ts new file mode 100644 index 00000000..f71e2bb1 --- /dev/null +++ b/packages/xrpl/src/models/ledger/XChainOwnedCreateAccountClaimID.ts @@ -0,0 +1,37 @@ +import { XChainBridge } from '../common' + +import BaseLedgerEntry from './BaseLedgerEntry' + +export default interface XChainOwnedCreateAccountClaimID + extends BaseLedgerEntry { + LedgerEntryType: 'XChainOwnedCreateAccountClaimID' + + Account: string + + XChainBridge: XChainBridge + + XChainAccountCreateCount: number + // TODO: type this better + XChainCreateAccountAttestations: object[] + + /** + * A bit-map of boolean flags. No flags are defined for, + * XChainOwnedCreateAccountClaimIDs, so this value is always 0. + */ + Flags: 0 + /** + * A hint indicating which page of the sender's owner directory links to this + * object, in case the directory consists of multiple pages. + */ + OwnerNode: string + /** + * The identifying hash of the transaction that most recently modified this + * object. + */ + PreviousTxnID: string + /** + * The index of the ledger that contains the transaction that most recently + * modified this object. + */ + PreviousTxnLgrSeq: number +} diff --git a/packages/xrpl/src/models/ledger/index.ts b/packages/xrpl/src/models/ledger/index.ts index b4894753..be4515b2 100644 --- a/packages/xrpl/src/models/ledger/index.ts +++ b/packages/xrpl/src/models/ledger/index.ts @@ -19,6 +19,7 @@ import RippleState, { RippleStateFlags } from './RippleState' import SignerList, { SignerListFlags } from './SignerList' import Ticket from './Ticket' import XChainOwnedClaimID from './XChainOwnedClaimID' +import XChainOwnedCreateAccountClaimID from './XChainOwnedCreateAccountClaimID' export { AccountRoot, @@ -44,4 +45,5 @@ export { SignerListFlags, Ticket, XChainOwnedClaimID, + XChainOwnedCreateAccountClaimID, } From c52160c1c658136cd9a4f36353d3ba1d433e2cfb Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 14 Feb 2023 16:18:51 -0500 Subject: [PATCH 59/70] update account_objects --- packages/xrpl/src/models/methods/accountObjects.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/xrpl/src/models/methods/accountObjects.ts b/packages/xrpl/src/models/methods/accountObjects.ts index 45550b53..cf69a320 100644 --- a/packages/xrpl/src/models/methods/accountObjects.ts +++ b/packages/xrpl/src/models/methods/accountObjects.ts @@ -1,5 +1,6 @@ import { AccountObjectType, LedgerIndex } from '../common' import { + Bridge, Check, DepositPreauth, Escrow, @@ -8,6 +9,8 @@ import { RippleState, SignerList, Ticket, + XChainOwnedClaimID, + XChainOwnedCreateAccountClaimID, } from '../ledger' import { BaseRequest, BaseResponse } from './baseMethod' @@ -67,6 +70,8 @@ type AccountObject = | SignerList | Ticket | RippleState + | XChainOwnedClaimID + | XChainOwnedCreateAccountClaimID /** * Response expected from an {@link AccountObjectsRequest}. From 38a313b77c883928d7f062e91731ca35292b7e8c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 14 Feb 2023 16:20:15 -0500 Subject: [PATCH 60/70] update models to latest rippled --- .../models/transactions/XChainAddAccountCreateAttestation.ts | 2 ++ .../xrpl/src/models/transactions/XChainAddClaimAttestation.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts index fd253141..e0f654cf 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts @@ -14,6 +14,8 @@ export interface XChainAddAccountCreateAttestation extends BaseTransaction { AttestationRewardAccount: string + AttestationSignerAccount: string + Destination: string OtherChainSource: string diff --git a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts index 1abca52e..e94bb9bd 100644 --- a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts @@ -14,6 +14,8 @@ export interface XChainAddClaimAttestation extends BaseTransaction { AttestationRewardAccount: string + AttestationSignerAccount: string + Destination?: string OtherChainSource: string From 7057b60d1003f7a0f78ec8d3264924d6ddf041d9 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 14 Feb 2023 16:20:48 -0500 Subject: [PATCH 61/70] fix minor issues --- .vscode/settings.json | 7 ++++--- packages/xrpl/src/models/methods/accountObjects.ts | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 26c6fb83..feb1c4b4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,11 +1,12 @@ { "editor.tabSize": 2, "cSpell.words": [ - "Multisigned", - "Setf", "hostid", + "Multisigned", "preauthorization", - "secp256k1" + "secp256k1", + "Setf", + "xchain" ], "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", diff --git a/packages/xrpl/src/models/methods/accountObjects.ts b/packages/xrpl/src/models/methods/accountObjects.ts index cf69a320..e30f29dd 100644 --- a/packages/xrpl/src/models/methods/accountObjects.ts +++ b/packages/xrpl/src/models/methods/accountObjects.ts @@ -1,6 +1,5 @@ import { AccountObjectType, LedgerIndex } from '../common' import { - Bridge, Check, DepositPreauth, Escrow, From f9957c5a3c9b2914876aa716510326c90912b6e2 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 14 Feb 2023 16:22:55 -0500 Subject: [PATCH 62/70] fix bridge ledger_entry --- packages/xrpl/src/models/methods/ledgerEntry.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/xrpl/src/models/methods/ledgerEntry.ts b/packages/xrpl/src/models/methods/ledgerEntry.ts index 05edc3c3..44793d36 100644 --- a/packages/xrpl/src/models/methods/ledgerEntry.ts +++ b/packages/xrpl/src/models/methods/ledgerEntry.ts @@ -138,14 +138,7 @@ export interface LedgerEntryRequest extends BaseRequest { } | string - xchain_bridge?: - | { - locking_chain_door: string - locking_chain_issue: Currency - issuing_chain_door: string - issuing_chain_issue: Currency - } - | string + bridge_account?: string xchain_claim_id?: | { From f5645126f9d780595a32aae5bda71d684782442d Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 14 Feb 2023 17:33:27 -0500 Subject: [PATCH 63/70] add XChainModifyBridge flag --- .../models/transactions/XChainModifyBridge.ts | 12 ++++- .../xrpl/src/models/transactions/index.ts | 6 ++- packages/xrpl/src/models/utils/flags.ts | 47 +++++-------------- 3 files changed, 29 insertions(+), 36 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts index ba12acaa..70e8c90c 100644 --- a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts +++ b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts @@ -1,7 +1,15 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { BaseTransaction, GlobalFlags, validateBaseTransaction } from './common' + +export enum XChainModifyBridgeFlags { + tfClearAccountCreateAmount = 0x00010000, +} + +export interface XChainModifyBridgeFlagsInterface extends GlobalFlags { + tfClearAccountCreateAmount?: boolean +} /** * @@ -15,6 +23,8 @@ export interface XChainModifyBridge extends BaseTransaction { SignatureReward?: Amount MinAccountCreateAmount?: Amount + + Flags?: number | XChainModifyBridgeFlagsInterface } /** diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 492739e3..4e0ec3d9 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -52,4 +52,8 @@ export { XChainCommit } from './XChainCommit' export { XChainCreateBridge } from './XChainCreateBridge' export { XChainCreateClaimID } from './XChainCreateClaimID' export { XChainAccountCreateCommit } from './XChainAccountCreateCommit' -export { XChainModifyBridge } from './XChainModifyBridge' +export { + XChainModifyBridge, + XChainModifyBridgeFlags, + XChainModifyBridgeFlagsInterface, +} from './XChainModifyBridge' diff --git a/packages/xrpl/src/models/utils/flags.ts b/packages/xrpl/src/models/utils/flags.ts index f185c99b..2c77c7fd 100644 --- a/packages/xrpl/src/models/utils/flags.ts +++ b/packages/xrpl/src/models/utils/flags.ts @@ -22,6 +22,10 @@ import { } from '../transactions/paymentChannelClaim' import type { Transaction } from '../transactions/transaction' import { TrustSetFlagsInterface, TrustSetFlags } from '../transactions/trustSet' +import { + XChainModifyBridgeFlags, + XChainModifyBridgeFlagsInterface, +} from '../transactions/XChainModifyBridge' import { isFlagEnabled } from '.' @@ -61,55 +65,30 @@ export function setTransactionFlagsToNumber(tx: Transaction): void { switch (tx.TransactionType) { case 'AccountSet': - tx.Flags = convertAccountSetFlagsToNumber(tx.Flags) + tx.Flags = convertFlagsToNumber(tx.Flags, AccountSetTfFlags) return case 'OfferCreate': - tx.Flags = convertOfferCreateFlagsToNumber(tx.Flags) + tx.Flags = convertFlagsToNumber(tx.Flags, OfferCreateFlags) return case 'PaymentChannelClaim': - tx.Flags = convertPaymentChannelClaimFlagsToNumber(tx.Flags) + tx.Flags = convertFlagsToNumber(tx.Flags, PaymentChannelClaimFlags) return case 'Payment': - tx.Flags = convertPaymentTransactionFlagsToNumber(tx.Flags) + tx.Flags = convertFlagsToNumber(tx.Flags, PaymentFlags) return case 'TrustSet': - tx.Flags = convertTrustSetFlagsToNumber(tx.Flags) + tx.Flags = convertFlagsToNumber(tx.Flags, TrustSetFlags) + return + case 'XChainModifyBridge': + tx.Flags = convertFlagsToNumber(tx.Flags, XChainModifyBridgeFlags) return default: tx.Flags = 0 } } -function convertAccountSetFlagsToNumber( - flags: AccountSetFlagsInterface, -): number { - return reduceFlags(flags, AccountSetTfFlags) -} - -function convertOfferCreateFlagsToNumber( - flags: OfferCreateFlagsInterface, -): number { - return reduceFlags(flags, OfferCreateFlags) -} - -function convertPaymentChannelClaimFlagsToNumber( - flags: PaymentChannelClaimFlagsInterface, -): number { - return reduceFlags(flags, PaymentChannelClaimFlags) -} - -function convertPaymentTransactionFlagsToNumber( - flags: PaymentFlagsInterface, -): number { - return reduceFlags(flags, PaymentFlags) -} - -function convertTrustSetFlagsToNumber(flags: TrustSetFlagsInterface): number { - return reduceFlags(flags, TrustSetFlags) -} - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- added ValidationError check for flagEnum -function reduceFlags(flags: GlobalFlags, flagEnum: any): number { +function convertFlagsToNumber(flags: GlobalFlags, flagEnum: any): number { return Object.keys(flags).reduce((resultFlags, flag) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- safe member access if (flagEnum[flag] == null) { From 2c15d2c2058836b7044fa54b3189277b0e35140b Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 15 Feb 2023 09:51:24 -0500 Subject: [PATCH 64/70] fix linter errors --- packages/xrpl/src/models/utils/flags.ts | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/packages/xrpl/src/models/utils/flags.ts b/packages/xrpl/src/models/utils/flags.ts index 2c77c7fd..6b20aefc 100644 --- a/packages/xrpl/src/models/utils/flags.ts +++ b/packages/xrpl/src/models/utils/flags.ts @@ -6,26 +6,14 @@ import { AccountRootFlagsInterface, AccountRootFlags, } from '../ledger/AccountRoot' -import { - AccountSetFlagsInterface, - AccountSetTfFlags, -} from '../transactions/accountSet' +import { AccountSetTfFlags } from '../transactions/accountSet' import { GlobalFlags } from '../transactions/common' -import { - OfferCreateFlagsInterface, - OfferCreateFlags, -} from '../transactions/offerCreate' -import { PaymentFlagsInterface, PaymentFlags } from '../transactions/payment' -import { - PaymentChannelClaimFlagsInterface, - PaymentChannelClaimFlags, -} from '../transactions/paymentChannelClaim' +import { OfferCreateFlags } from '../transactions/offerCreate' +import { PaymentFlags } from '../transactions/payment' +import { PaymentChannelClaimFlags } from '../transactions/paymentChannelClaim' import type { Transaction } from '../transactions/transaction' -import { TrustSetFlagsInterface, TrustSetFlags } from '../transactions/trustSet' -import { - XChainModifyBridgeFlags, - XChainModifyBridgeFlagsInterface, -} from '../transactions/XChainModifyBridge' +import { TrustSetFlags } from '../transactions/trustSet' +import { XChainModifyBridgeFlags } from '../transactions/XChainModifyBridge' import { isFlagEnabled } from '.' From df0d32713a7fca094d8306cd8f92d038acb64a4a Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 15 Feb 2023 09:56:36 -0500 Subject: [PATCH 65/70] Update definitions.json --- packages/ripple-binary-codec/src/enums/definitions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 1f0f4ec2..cdf657a6 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -2566,7 +2566,8 @@ "tecXCHAIN_ACCOUNT_CREATE_PAST": 182, "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 183, "tecXCHAIN_PAYMENT_FAILED": 184, - "tecXCHAIN_SELF_COMMIT": 185 + "tecXCHAIN_SELF_COMMIT": 185, + "tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR": 186 }, "TRANSACTION_TYPES": { "Invalid": -1, From 8c83a12933b53ccffcb469e75120117a89542460 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 15 Feb 2023 10:58:07 -0500 Subject: [PATCH 66/70] add rbc tests for the new txs --- .../test/fixtures/codec-fixtures.json | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 140f7dec..391100b1 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4571,6 +4571,67 @@ "TransactionType": "XChainAccountCreateCommit", "TxnSignature": "304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF18" } + }, + { + "binary": "12002E2400000005201B0000000D30150000000000000006614000000000989680684000000000000014601D40000000000000647121ED1F4A024ACFEBDB6C7AA88DEDE3364E060487EA31B14CC9E0D610D152B31AADC27321EDF54108BA2E0A0D3DC2AE3897F8BE0EFE776AE8D0F9FB0D0B9D64233084A8DDD1744003E74AEF1F585F156786429D2FC87A89E5C6B5A56D68BFC9A6A329F3AC67CBF2B6958283C663A4522278CA162C69B23CF75149AF022B410EA0508C16F42058007640EEFCFA3DC2AB4AB7C4D2EBBC168CB621A11B82BABD86534DFC8EFA72439A49662D744073CD848E7A587A95B35162CDF9A69BB237E72C9537A987F5B8C394F30D81145E7A3E3D7200A794FA801C66CE3775B6416EE4128314C15F113E49BCC4B9FFF43CD0366C23ACD82F75638012143FD9ED9A79DEA67CB5D585111FEF0A29203FA0408015145E7A3E3D7200A794FA801C66CE3775B6416EE4120010130101191486F0B1126CE1205E59FDFDD2661A9FB7505CA70F000000000000000000000000000000000000000014B5F762798A53D543A014CAF8B297CFF8F2F937E80000000000000000000000000000000000000000", + "json": { + "Account": "r9cYxdjQsoXAEz3qQJc961SNLaXRkWXCvT", + "Amount": "10000000", + "AttestationRewardAccount": "r9cYxdjQsoXAEz3qQJc961SNLaXRkWXCvT", + "Destination": "rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi", + "Fee": "20", + "LastLedgerSequence": 13, + "OtherChainSource": "raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym", + "PublicKey": "ED1F4A024ACFEBDB6C7AA88DEDE3364E060487EA31B14CC9E0D610D152B31AADC2", + "Sequence": 5, + "Signature": "EEFCFA3DC2AB4AB7C4D2EBBC168CB621A11B82BABD86534DFC8EFA72439A49662D744073CD848E7A587A95B35162CDF9A69BB237E72C9537A987F5B8C394F30D", + "SignatureReward": "100", + "SigningPubKey": "EDF54108BA2E0A0D3DC2AE3897F8BE0EFE776AE8D0F9FB0D0B9D64233084A8DDD1", + "TransactionType": "XChainAddAccountCreateAttestation", + "TxnSignature": "03E74AEF1F585F156786429D2FC87A89E5C6B5A56D68BFC9A6A329F3AC67CBF2B6958283C663A4522278CA162C69B23CF75149AF022B410EA0508C16F4205800", + "WasLockingChainSend": 1, + "XChainAccountCreateCount": "0000000000000006", + "XChainBridge": { + "IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "IssuingChainIssue": { + "currency": "XRP" + }, + "LockingChainDoor": "rDJVtEuDKr4rj1B3qtW7R5TVWdXV2DY7Qg", + "LockingChainIssue": { + "currency": "XRP" + } + } + } + }, + { + "binary": "12002D2400000009201B00000013301400000000000000016140000000009896806840000000000000147121ED7541DEC700470F54276C90C333A13CDBB5D341FD43C60CEA12170F6D6D4E11367321ED0406B134786FE0751717226657F7BF8AFE96442C05D28ACEC66FB64852BA604C7440D0423649E48A44F181262CF5FC08A68E7FA5CD9E55843E4F09014B76E602574741E8553383A4B43CABD194BB96713647FC0B885BE248E4FFA068FA3E6994CF0476407C175050B08000AD35EEB2D87E16CD3F95A0AEEBF2A049474275153D9D4DD44528FE99AA50E71660A15B0B768E1B90E609BBD5DC7AFAFD45D9705D72D40EA10C81141F30A4D728AB98B0950EC3B9815E6C8D43A7D5598314C15F113E49BCC4B9FFF43CD0366C23ACD82F75638012143FD9ED9A79DEA67CB5D585111FEF0A29203FA0408015141F30A4D728AB98B0950EC3B9815E6C8D43A7D5590010130101191486F0B1126CE1205E59FDFDD2661A9FB7505CA70F000000000000000000000000000000000000000014B5F762798A53D543A014CAF8B297CFF8F2F937E80000000000000000000000000000000000000000", + "json": { + "Account": "rsqvD8WFFEBBv4nztpoW9YYXJ7eRzLrtc3", + "Amount": "10000000", + "AttestationRewardAccount": "rsqvD8WFFEBBv4nztpoW9YYXJ7eRzLrtc3", + "Destination": "rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi", + "Fee": "20", + "LastLedgerSequence": 19, + "OtherChainSource": "raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym", + "PublicKey": "ED7541DEC700470F54276C90C333A13CDBB5D341FD43C60CEA12170F6D6D4E1136", + "Sequence": 9, + "Signature": "7C175050B08000AD35EEB2D87E16CD3F95A0AEEBF2A049474275153D9D4DD44528FE99AA50E71660A15B0B768E1B90E609BBD5DC7AFAFD45D9705D72D40EA10C", + "SigningPubKey": "ED0406B134786FE0751717226657F7BF8AFE96442C05D28ACEC66FB64852BA604C", + "TransactionType": "XChainAddClaimAttestation", + "TxnSignature": "D0423649E48A44F181262CF5FC08A68E7FA5CD9E55843E4F09014B76E602574741E8553383A4B43CABD194BB96713647FC0B885BE248E4FFA068FA3E6994CF04", + "WasLockingChainSend": 1, + "XChainBridge": { + "IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "IssuingChainIssue": { + "currency": "XRP" + }, + "LockingChainDoor": "rDJVtEuDKr4rj1B3qtW7R5TVWdXV2DY7Qg", + "LockingChainIssue": { + "currency": "XRP" + } + }, + "XChainClaimID": "0000000000000001" + } } ], "ledgerData": [{ From dd841c9441c5a70a834dd54b5652ee14f4d2b1ed Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 15 Feb 2023 11:27:06 -0500 Subject: [PATCH 67/70] update validateXChainModifyBridge --- .../models/transactions/XChainModifyBridge.ts | 27 ++++++++++++++++- .../xrpl/src/models/transactions/common.ts | 30 +++++++++++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts index 70e8c90c..9e7f5b95 100644 --- a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts +++ b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts @@ -1,7 +1,13 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, GlobalFlags, validateBaseTransaction } from './common' +import { + BaseTransaction, + GlobalFlags, + isAmount, + isXChainBridge, + validateBaseTransaction, +} from './common' export enum XChainModifyBridgeFlags { tfClearAccountCreateAmount = 0x00010000, @@ -39,4 +45,23 @@ export function validateXChainModifyBridge(tx: Record): void { if (tx.XChainBridge == null) { throw new ValidationError('XChainModifyBridge: missing field XChainBridge') } + + if (!isXChainBridge(tx.XChainBridge)) { + throw new ValidationError('XChainModifyBridge: invalid field XChainBridge') + } + + if (tx.SignatureReward !== undefined && !isAmount(tx.SignatureReward)) { + throw new ValidationError( + 'XChainModifyBridge: invalid field SignatureReward', + ) + } + + if ( + tx.MinAccountCreateAmount !== undefined && + !isAmount(tx.MinAccountCreateAmount) + ) { + throw new ValidationError( + 'XChainModifyBridge: invalid field MinAccountCreateAmount', + ) + } } diff --git a/packages/xrpl/src/models/transactions/common.ts b/packages/xrpl/src/models/transactions/common.ts index 498a2d74..f7b7571d 100644 --- a/packages/xrpl/src/models/transactions/common.ts +++ b/packages/xrpl/src/models/transactions/common.ts @@ -4,7 +4,13 @@ import { TRANSACTION_TYPES } from 'ripple-binary-codec' import { ValidationError } from '../../errors' -import { Amount, IssuedCurrencyAmount, Memo, Signer } from '../common' +import { + Amount, + IssuedCurrencyAmount, + Memo, + Signer, + XChainBridge, +} from '../common' import { onlyHasFields } from '../utils' const MEMO_SIZE = 3 @@ -51,6 +57,7 @@ function isSigner(obj: unknown): boolean { } const ISSUED_CURRENCY_SIZE = 3 +const XCHAIN_BRIDGE_SIZE = 4 function isRecord(value: unknown): value is Record { return value !== null && typeof value === 'object' @@ -60,7 +67,7 @@ function isRecord(value: unknown): value is Record { * Verify the form and type of an IssuedCurrencyAmount at runtime. * * @param input - The input to check the form and type of. - * @returns Whether the IssuedCurrencyAmount is malformed. + * @returns Whether the IssuedCurrencyAmount is properly formed. */ export function isIssuedCurrency( input: unknown, @@ -78,12 +85,29 @@ export function isIssuedCurrency( * Verify the form and type of an Amount at runtime. * * @param amount - The object to check the form and type of. - * @returns Whether the Amount is malformed. + * @returns Whether the Amount is properly formed. */ export function isAmount(amount: unknown): amount is Amount { return typeof amount === 'string' || isIssuedCurrency(amount) } +/** + * Verify the form and type of an XChainBridge at runtime. + * + * @param input - The input to check the form and type of. + * @returns Whether the XChainBridge is properly formed. + */ +export function isXChainBridge(input: unknown): input is XChainBridge { + return ( + isRecord(input) && + Object.keys(input).length === XCHAIN_BRIDGE_SIZE && + typeof input.LockingChainDoor === 'string' && + typeof input.LockingChainIssue === 'string' && + typeof input.IssuingChainDoor === 'string' && + typeof input.IsusingChainIssue === 'string' + ) +} + // eslint-disable-next-line @typescript-eslint/no-empty-interface -- no global flags right now, so this is fine export interface GlobalFlags {} From d29bdbb5de1a70eb66287feefee7d4786e5565bd Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 15 Feb 2023 12:14:59 -0500 Subject: [PATCH 68/70] add validate methods to other xchain txs --- create_validate.py | 118 ++++++++++++++++++ .../transactions/XChainAccountCreateCommit.ts | 33 ++++- .../XChainAddAccountCreateAttestation.ts | 101 +++++++++++++-- .../transactions/XChainAddClaimAttestation.ts | 87 ++++++++++--- .../src/models/transactions/XChainClaim.ts | 34 ++++- .../src/models/transactions/XChainCommit.ts | 31 ++++- .../models/transactions/XChainCreateBridge.ts | 26 +++- .../transactions/XChainCreateClaimID.ts | 23 +++- .../xrpl/src/models/transactions/common.ts | 2 +- 9 files changed, 421 insertions(+), 34 deletions(-) create mode 100644 create_validate.py diff --git a/create_validate.py b/create_validate.py new file mode 100644 index 00000000..84c48d93 --- /dev/null +++ b/create_validate.py @@ -0,0 +1,118 @@ +""" +Helper script to write `validate` methods for transactions. +""" +import sys + + +NORMAL_TYPES = ["number", "string"] +NUMBERS = ["0", "1"] + + +def main(): + model_name = sys.argv[1] + filename = f"./packages/xrpl/src/models/transactions/{model_name}.ts" + model, tx_name = get_model(filename) + return process_model(model, tx_name) + + +# Extract just the model from the file +def get_model(filename): + model = "" + started = False + ended = False + with open(filename) as f: + for line in f: + if ended: + continue + if not started and not line.startswith("export"): + continue + if not started and "Flags" in line: + continue + if not started: + started = True + model += line + if line == '}\n': + ended = True + + lines = model.split("\n") + name_line = lines[0].split(" ") + tx_name = name_line[2] + return model, tx_name + +# Process the model and build the `validate` method + +def get_if_line_param_part(param: str, param_type: str): + if param_type in NORMAL_TYPES: + return f"typeof tx.{param} !== \"{param_type}\"" + elif param_type in NUMBERS: + return f"tx.{param} !== {param_type}" + else: + return f"!is{param_type}(tx.{param})" + + +def process_model(model, tx_name): + output = "" + + for line in model.split("\n"): + if line == "": + continue + if line.startswith("export"): + continue + if line == "}": + continue + line = line.strip() + + if line.startswith("TransactionType"): + continue + if line.startswith("Flags"): + continue + + split = line.split(" ") + param = split[0].strip("?:") + param_types = split[1:] + optional = split[0].endswith("?:") + + if optional: + if_line = f" if(tx.{param} !== undefined && " + else: + output += f" if (tx.{param} == null) {{\n" + output += f" throw new ValidationError('{tx_name}: missing field {param}')\n" + output += " }\n\n" + if_line = " if(" + + if len(param_types) == 1: + param_type = param_types[0] + if_line += get_if_line_param_part(param, param_type) + else: + i = 0 + if_outputs = [] + while i < len(param_types): + param_type = param_types[i] + if_outputs.append(get_if_line_param_part(param, param_type)) + i += 2 + if_line += "(" + " && ".join(if_outputs) + ")" + if_line += ") {\n" + + output += if_line + output += f" throw new ValidationError('{tx_name}: invalid field {param}')\n" + output += " }\n\n" + + output = output[:-1] + output += "}\n" + + output = f"""/** + * Verify the form and type of a {tx_name} at runtime. + * + * @param tx - A {tx_name} Transaction. + * @throws When the {tx_name} is malformed. + */ +export function validate{tx_name}(tx: Record): void {{ + validateBaseTransaction(tx) + +""" + output + + return output + + +if __name__ == "__main__": + print(main()) diff --git a/packages/xrpl/src/models/transactions/XChainAccountCreateCommit.ts b/packages/xrpl/src/models/transactions/XChainAccountCreateCommit.ts index 1be25413..45dd0612 100644 --- a/packages/xrpl/src/models/transactions/XChainAccountCreateCommit.ts +++ b/packages/xrpl/src/models/transactions/XChainAccountCreateCommit.ts @@ -1,7 +1,12 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + isAmount, + isXChainBridge, + validateBaseTransaction, +} from './common' /** * @@ -25,6 +30,7 @@ export interface XChainAccountCreateCommit extends BaseTransaction { * @param tx - A XChainAccountCreateCommit Transaction. * @throws When the XChainAccountCreateCommit is malformed. */ +// eslint-disable-next-line max-lines-per-function -- okay for this function, there's a lot of things to check export function validateXChainAccountCreateCommit( tx: Record, ): void { @@ -36,19 +42,44 @@ export function validateXChainAccountCreateCommit( ) } + if (!isXChainBridge(tx.XChainBridge)) { + throw new ValidationError( + 'XChainAccountCreateCommit: invalid field XChainBridge', + ) + } + if (tx.SignatureReward == null) { throw new ValidationError( 'XChainAccountCreateCommit: missing field SignatureReward', ) } + if ( + typeof tx.SignatureReward !== 'number' && + typeof tx.SignatureReward !== 'string' + ) { + throw new ValidationError( + 'XChainAccountCreateCommit: invalid field SignatureReward', + ) + } + if (tx.Destination == null) { throw new ValidationError( 'XChainAccountCreateCommit: missing field Destination', ) } + if (typeof tx.Destination !== 'string') { + throw new ValidationError( + 'XChainAccountCreateCommit: invalid field Destination', + ) + } + if (tx.Amount == null) { throw new ValidationError('XChainAccountCreateCommit: missing field Amount') } + + if (!isAmount(tx.Amount)) { + throw new ValidationError('XChainAccountCreateCommit: invalid field Amount') + } } diff --git a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts index e0f654cf..11b088de 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts @@ -1,7 +1,12 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + isAmount, + isXChainBridge, + validateBaseTransaction, +} from './common' /** * @@ -39,7 +44,7 @@ export interface XChainAddAccountCreateAttestation extends BaseTransaction { * @param tx - A XChainAddAccountCreateAttestation Transaction. * @throws When the XChainAddAccountCreateAttestation is malformed. */ -// eslint-disable-next-line max-lines-per-function, complexity -- needed +// eslint-disable-next-line max-lines-per-function, max-statements, complexity -- okay for this function, lots of things to check export function validateXChainAddAccountCreateAttestation( tx: Record, ): void { @@ -47,61 +52,133 @@ export function validateXChainAddAccountCreateAttestation( if (tx.Amount == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.Amount', + 'XChainAddAccountCreateAttestation: missing field Amount', + ) + } + + if (!isAmount(tx.Amount)) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field Amount', ) } if (tx.AttestationRewardAccount == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.AttestationRewardAccount', + 'XChainAddAccountCreateAttestation: missing field AttestationRewardAccount', + ) + } + + if (typeof tx.AttestationRewardAccount !== 'string') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field AttestationRewardAccount', + ) + } + + if (tx.AttestationSignerAccount == null) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: missing field AttestationSignerAccount', + ) + } + + if (typeof tx.AttestationSignerAccount !== 'string') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field AttestationSignerAccount', ) } if (tx.Destination == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.Destination', + 'XChainAddAccountCreateAttestation: missing field Destination', + ) + } + + if (typeof tx.Destination !== 'string') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field Destination', ) } if (tx.OtherChainSource == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.OtherChainSource', + 'XChainAddAccountCreateAttestation: missing field OtherChainSource', + ) + } + + if (typeof tx.OtherChainSource !== 'string') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field OtherChainSource', ) } if (tx.PublicKey == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.PublicKey', + 'XChainAddAccountCreateAttestation: missing field PublicKey', + ) + } + + if (typeof tx.PublicKey !== 'string') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field PublicKey', ) } if (tx.Signature == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.Signature', + 'XChainAddAccountCreateAttestation: missing field Signature', + ) + } + + if (typeof tx.Signature !== 'string') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field Signature', ) } if (tx.SignatureReward == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.SignatureReward', + 'XChainAddAccountCreateAttestation: missing field SignatureReward', + ) + } + + if (!isAmount(tx.SignatureReward)) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field SignatureReward', ) } if (tx.WasLockingChainSend == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.WasLockingChainSend', + 'XChainAddAccountCreateAttestation: missing field WasLockingChainSend', + ) + } + + if (tx.WasLockingChainSend !== 0 && tx.WasLockingChainSend !== 1) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field WasLockingChainSend', ) } if (tx.XChainAccountCreateCount == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.XChainAccountCreateCount', + 'XChainAddAccountCreateAttestation: missing field XChainAccountCreateCount', + ) + } + + if (typeof tx.XChainAccountCreateCount !== 'string') { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field XChainAccountCreateCount', ) } if (tx.XChainBridge == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.XChainBridge', + 'XChainAddAccountCreateAttestation: missing field XChainBridge', + ) + } + + if (!isXChainBridge(tx.XChainBridge)) { + throw new ValidationError( + 'XChainAddAccountCreateAttestation: invalid field XChainBridge', ) } } diff --git a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts index e94bb9bd..65f08425 100644 --- a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts @@ -1,7 +1,12 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + isAmount, + isXChainBridge, + validateBaseTransaction, +} from './common' /** * @@ -37,69 +42,119 @@ export interface XChainAddClaimAttestation extends BaseTransaction { * @param tx - A XChainAddClaimAttestation Transaction. * @throws When the XChainAddClaimAttestation is malformed. */ -// eslint-disable-next-line max-lines-per-function, complexity -- needed +// eslint-disable-next-line max-lines-per-function, max-statements, complexity -- okay for this function, lots of things to check export function validateXChainAddClaimAttestation( tx: Record, ): void { validateBaseTransaction(tx) if (tx.Amount == null) { - throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.Amount', - ) + throw new ValidationError('XChainAddClaimAttestation: missing field Amount') + } + + if (!isAmount(tx.Amount)) { + throw new ValidationError('XChainAddClaimAttestation: invalid field Amount') } if (tx.AttestationRewardAccount == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.AttestationRewardAccount', + 'XChainAddClaimAttestation: missing field AttestationRewardAccount', ) } - if (tx.Destination != null && typeof tx.Destination !== 'string') { + if (typeof tx.AttestationRewardAccount !== 'string') { throw new ValidationError( - 'XChainAddAccountCreateAttestation: invalid field tx.Destination', + 'XChainAddClaimAttestation: invalid field AttestationRewardAccount', + ) + } + + if (tx.AttestationSignerAccount == null) { + throw new ValidationError( + 'XChainAddClaimAttestation: missing field AttestationSignerAccount', + ) + } + + if (typeof tx.AttestationSignerAccount !== 'string') { + throw new ValidationError( + 'XChainAddClaimAttestation: invalid field AttestationSignerAccount', + ) + } + + if (tx.Destination !== undefined && typeof tx.Destination !== 'string') { + throw new ValidationError( + 'XChainAddClaimAttestation: invalid field Destination', ) } if (tx.OtherChainSource == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.OtherChainSource', + 'XChainAddClaimAttestation: missing field OtherChainSource', + ) + } + + if (typeof tx.OtherChainSource !== 'string') { + throw new ValidationError( + 'XChainAddClaimAttestation: invalid field OtherChainSource', ) } if (tx.PublicKey == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.PublicKey', + 'XChainAddClaimAttestation: missing field PublicKey', + ) + } + + if (typeof tx.PublicKey !== 'string') { + throw new ValidationError( + 'XChainAddClaimAttestation: invalid field PublicKey', ) } if (tx.Signature == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.Signature', + 'XChainAddClaimAttestation: missing field Signature', + ) + } + + if (typeof tx.Signature !== 'string') { + throw new ValidationError( + 'XChainAddClaimAttestation: invalid field Signature', ) } if (tx.WasLockingChainSend == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.WasLockingChainSend', + 'XChainAddClaimAttestation: missing field WasLockingChainSend', ) } - if (tx.XChainAccountCreateCount == null) { + if (tx.WasLockingChainSend !== 0 && tx.WasLockingChainSend !== 1) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.XChainAccountCreateCount', + 'XChainAddClaimAttestation: invalid field WasLockingChainSend', ) } if (tx.XChainBridge == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.XChainBridge', + 'XChainAddClaimAttestation: missing field XChainBridge', + ) + } + + if (!isXChainBridge(tx.XChainBridge)) { + throw new ValidationError( + 'XChainAddClaimAttestation: invalid field XChainBridge', ) } if (tx.XChainClaimID == null) { throw new ValidationError( - 'XChainAddAccountCreateAttestation: missing field tx.XChainClaimID', + 'XChainAddClaimAttestation: missing field XChainClaimID', + ) + } + + if (typeof tx.XChainClaimID !== 'string') { + throw new ValidationError( + 'XChainAddClaimAttestation: invalid field XChainClaimID', ) } } diff --git a/packages/xrpl/src/models/transactions/XChainClaim.ts b/packages/xrpl/src/models/transactions/XChainClaim.ts index 7f121a64..c4baf30a 100644 --- a/packages/xrpl/src/models/transactions/XChainClaim.ts +++ b/packages/xrpl/src/models/transactions/XChainClaim.ts @@ -1,7 +1,12 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + isAmount, + isXChainBridge, + validateBaseTransaction, +} from './common' /** * @@ -27,6 +32,7 @@ export interface XChainClaim extends BaseTransaction { * @param tx - A XChainClaim Transaction. * @throws When the XChainClaim is malformed. */ +// eslint-disable-next-line complexity -- okay for this function, lots of things to check export function validateXChainClaim(tx: Record): void { validateBaseTransaction(tx) @@ -34,15 +40,41 @@ export function validateXChainClaim(tx: Record): void { throw new ValidationError('XChainClaim: missing field XChainBridge') } + if (!isXChainBridge(tx.XChainBridge)) { + throw new ValidationError('XChainClaim: invalid field XChainBridge') + } + if (tx.XChainClaimID == null) { throw new ValidationError('XChainClaim: missing field XChainClaimID') } + if ( + typeof tx.XChainClaimID !== 'number' && + typeof tx.XChainClaimID !== 'string' + ) { + throw new ValidationError('XChainClaim: invalid field XChainClaimID') + } + if (tx.Destination == null) { throw new ValidationError('XChainClaim: missing field Destination') } + if (typeof tx.Destination !== 'string') { + throw new ValidationError('XChainClaim: invalid field Destination') + } + + if ( + tx.DestinationTag !== undefined && + typeof tx.DestinationTag !== 'number' + ) { + throw new ValidationError('XChainClaim: invalid field DestinationTag') + } + if (tx.Amount == null) { throw new ValidationError('XChainClaim: missing field Amount') } + + if (!isAmount(tx.Amount)) { + throw new ValidationError('XChainClaim: invalid field Amount') + } } diff --git a/packages/xrpl/src/models/transactions/XChainCommit.ts b/packages/xrpl/src/models/transactions/XChainCommit.ts index 07019e74..b694d5fe 100644 --- a/packages/xrpl/src/models/transactions/XChainCommit.ts +++ b/packages/xrpl/src/models/transactions/XChainCommit.ts @@ -1,7 +1,12 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + isAmount, + isXChainBridge, + validateBaseTransaction, +} from './common' /** * @@ -32,11 +37,35 @@ export function validateXChainCommit(tx: Record): void { throw new ValidationError('XChainCommit: missing field XChainBridge') } + if (!isXChainBridge(tx.XChainBridge)) { + throw new ValidationError('XChainCommit: invalid field XChainBridge') + } + if (tx.XChainClaimID == null) { throw new ValidationError('XChainCommit: missing field XChainClaimID') } + if ( + typeof tx.XChainClaimID !== 'number' && + typeof tx.XChainClaimID !== 'string' + ) { + throw new ValidationError('XChainCommit: invalid field XChainClaimID') + } + + if ( + tx.OtherChainDestination !== undefined && + typeof tx.OtherChainDestination !== 'string' + ) { + throw new ValidationError( + 'XChainCommit: invalid field OtherChainDestination', + ) + } + if (tx.Amount == null) { throw new ValidationError('XChainCommit: missing field Amount') } + + if (!isAmount(tx.Amount)) { + throw new ValidationError('XChainCommit: invalid field Amount') + } } diff --git a/packages/xrpl/src/models/transactions/XChainCreateBridge.ts b/packages/xrpl/src/models/transactions/XChainCreateBridge.ts index 8356071b..d6e4d2f3 100644 --- a/packages/xrpl/src/models/transactions/XChainCreateBridge.ts +++ b/packages/xrpl/src/models/transactions/XChainCreateBridge.ts @@ -1,7 +1,12 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + isAmount, + isXChainBridge, + validateBaseTransaction, +} from './common' /** * @@ -30,9 +35,28 @@ export function validateXChainCreateBridge(tx: Record): void { throw new ValidationError('XChainCreateBridge: missing field XChainBridge') } + if (!isXChainBridge(tx.XChainBridge)) { + throw new ValidationError('XChainCreateBridge: invalid field XChainBridge') + } + if (tx.SignatureReward == null) { throw new ValidationError( 'XChainCreateBridge: missing field SignatureReward', ) } + + if (!isAmount(tx.SignatureReward)) { + throw new ValidationError( + 'XChainCreateBridge: invalid field SignatureReward', + ) + } + + if ( + tx.MinAccountCreateAmount !== undefined && + !isAmount(tx.MinAccountCreateAmount) + ) { + throw new ValidationError( + 'XChainCreateBridge: invalid field MinAccountCreateAmount', + ) + } } diff --git a/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts b/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts index 24afe997..15df90af 100644 --- a/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts +++ b/packages/xrpl/src/models/transactions/XChainCreateClaimID.ts @@ -1,7 +1,12 @@ import { ValidationError } from '../../errors' import { Amount, XChainBridge } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + isAmount, + isXChainBridge, + validateBaseTransaction, +} from './common' /** * @@ -30,15 +35,31 @@ export function validateXChainCreateClaimID(tx: Record): void { throw new ValidationError('XChainCreateClaimID: missing field XChainBridge') } + if (!isXChainBridge(tx.XChainBridge)) { + throw new ValidationError('XChainCreateClaimID: invalid field XChainBridge') + } + if (tx.SignatureReward == null) { throw new ValidationError( 'XChainCreateClaimID: missing field SignatureReward', ) } + if (!isAmount(tx.SignatureReward)) { + throw new ValidationError( + 'XChainCreateClaimID: invalid field SignatureReward', + ) + } + if (tx.OtherChainSource == null) { throw new ValidationError( 'XChainCreateClaimID: missing field OtherChainSource', ) } + + if (typeof tx.OtherChainSource !== 'string') { + throw new ValidationError( + 'XChainCreateClaimID: invalid field OtherChainSource', + ) + } } diff --git a/packages/xrpl/src/models/transactions/common.ts b/packages/xrpl/src/models/transactions/common.ts index f7b7571d..ec18e423 100644 --- a/packages/xrpl/src/models/transactions/common.ts +++ b/packages/xrpl/src/models/transactions/common.ts @@ -104,7 +104,7 @@ export function isXChainBridge(input: unknown): input is XChainBridge { typeof input.LockingChainDoor === 'string' && typeof input.LockingChainIssue === 'string' && typeof input.IssuingChainDoor === 'string' && - typeof input.IsusingChainIssue === 'string' + typeof input.IssuingChainIssue === 'string' ) } From e69d3913b84a8f7a194693fbf3d64825858d2091 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 15 Feb 2023 12:41:18 -0500 Subject: [PATCH 69/70] fix isXChainBridge --- .../xrpl/src/models/transactions/common.ts | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/xrpl/src/models/transactions/common.ts b/packages/xrpl/src/models/transactions/common.ts index ec18e423..5374d1e1 100644 --- a/packages/xrpl/src/models/transactions/common.ts +++ b/packages/xrpl/src/models/transactions/common.ts @@ -6,6 +6,7 @@ import { TRANSACTION_TYPES } from 'ripple-binary-codec' import { ValidationError } from '../../errors' import { Amount, + IssuedCurrency, IssuedCurrencyAmount, Memo, Signer, @@ -56,6 +57,8 @@ function isSigner(obj: unknown): boolean { ) } +const XRP_CURRENCY_SIZE = 1 +const ISSUE_SIZE = 2 const ISSUED_CURRENCY_SIZE = 3 const XCHAIN_BRIDGE_SIZE = 4 @@ -63,6 +66,23 @@ function isRecord(value: unknown): value is Record { return value !== null && typeof value === 'object' } +/** + * Verify the form and type of an IssuedCurrency at runtime. + * + * @param input - The input to check the form and type of. + * @returns Whether the IssuedCurrency is properly formed. + */ +export function isIssue(input: unknown): input is IssuedCurrency { + return ( + isRecord(input) && + ((Object.keys(input).length === ISSUE_SIZE && + typeof input.issuer === 'string' && + typeof input.currency === 'string') || + (Object.keys(input).length === XRP_CURRENCY_SIZE && + input.currency === 'XRP')) + ) +} + /** * Verify the form and type of an IssuedCurrencyAmount at runtime. * @@ -98,13 +118,19 @@ export function isAmount(amount: unknown): amount is Amount { * @returns Whether the XChainBridge is properly formed. */ export function isXChainBridge(input: unknown): input is XChainBridge { + console.log(input) + console.log( + isRecord(input) && + Object.keys(input).length === XCHAIN_BRIDGE_SIZE && + typeof input.LockingChainDoor === 'string', + ) return ( isRecord(input) && Object.keys(input).length === XCHAIN_BRIDGE_SIZE && typeof input.LockingChainDoor === 'string' && - typeof input.LockingChainIssue === 'string' && + isIssue(input.LockingChainIssue) && typeof input.IssuingChainDoor === 'string' && - typeof input.IssuingChainIssue === 'string' + isIssue(input.IssuingChainIssue) ) } From 4693c91ec48bde33a1d6b82598466b31cbb19bff Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 15 Feb 2023 13:28:28 -0500 Subject: [PATCH 70/70] fix errors --- .../ripple-binary-codec/test/fixtures/codec-fixtures.json | 6 ++++-- packages/xrpl/src/models/transactions/common.ts | 6 ------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index 391100b1..f7ff70ed 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -4573,11 +4573,12 @@ } }, { - "binary": "12002E2400000005201B0000000D30150000000000000006614000000000989680684000000000000014601D40000000000000647121ED1F4A024ACFEBDB6C7AA88DEDE3364E060487EA31B14CC9E0D610D152B31AADC27321EDF54108BA2E0A0D3DC2AE3897F8BE0EFE776AE8D0F9FB0D0B9D64233084A8DDD1744003E74AEF1F585F156786429D2FC87A89E5C6B5A56D68BFC9A6A329F3AC67CBF2B6958283C663A4522278CA162C69B23CF75149AF022B410EA0508C16F42058007640EEFCFA3DC2AB4AB7C4D2EBBC168CB621A11B82BABD86534DFC8EFA72439A49662D744073CD848E7A587A95B35162CDF9A69BB237E72C9537A987F5B8C394F30D81145E7A3E3D7200A794FA801C66CE3775B6416EE4128314C15F113E49BCC4B9FFF43CD0366C23ACD82F75638012143FD9ED9A79DEA67CB5D585111FEF0A29203FA0408015145E7A3E3D7200A794FA801C66CE3775B6416EE4120010130101191486F0B1126CE1205E59FDFDD2661A9FB7505CA70F000000000000000000000000000000000000000014B5F762798A53D543A014CAF8B297CFF8F2F937E80000000000000000000000000000000000000000", + "binary": "12002E2400000005201B0000000D30150000000000000006614000000000989680684000000000000014601D40000000000000647121ED1F4A024ACFEBDB6C7AA88DEDE3364E060487EA31B14CC9E0D610D152B31AADC27321EDF54108BA2E0A0D3DC2AE3897F8BE0EFE776AE8D0F9FB0D0B9D64233084A8DDD1744003E74AEF1F585F156786429D2FC87A89E5C6B5A56D68BFC9A6A329F3AC67CBF2B6958283C663A4522278CA162C69B23CF75149AF022B410EA0508C16F42058007640EEFCFA3DC2AB4AB7C4D2EBBC168CB621A11B82BABD86534DFC8EFA72439A49662D744073CD848E7A587A95B35162CDF9A69BB237E72C9537A987F5B8C394F30D81145E7A3E3D7200A794FA801C66CE3775B6416EE4128314C15F113E49BCC4B9FFF43CD0366C23ACD82F75638012143FD9ED9A79DEA67CB5D585111FEF0A29203FA0408014145E7A3E3D7200A794FA801C66CE3775B6416EE4128015145E7A3E3D7200A794FA801C66CE3775B6416EE4120010130101191486F0B1126CE1205E59FDFDD2661A9FB7505CA70F000000000000000000000000000000000000000014B5F762798A53D543A014CAF8B297CFF8F2F937E80000000000000000000000000000000000000000", "json": { "Account": "r9cYxdjQsoXAEz3qQJc961SNLaXRkWXCvT", "Amount": "10000000", "AttestationRewardAccount": "r9cYxdjQsoXAEz3qQJc961SNLaXRkWXCvT", + "AttestationSignerAccount": "r9cYxdjQsoXAEz3qQJc961SNLaXRkWXCvT", "Destination": "rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi", "Fee": "20", "LastLedgerSequence": 13, @@ -4604,11 +4605,12 @@ } }, { - "binary": "12002D2400000009201B00000013301400000000000000016140000000009896806840000000000000147121ED7541DEC700470F54276C90C333A13CDBB5D341FD43C60CEA12170F6D6D4E11367321ED0406B134786FE0751717226657F7BF8AFE96442C05D28ACEC66FB64852BA604C7440D0423649E48A44F181262CF5FC08A68E7FA5CD9E55843E4F09014B76E602574741E8553383A4B43CABD194BB96713647FC0B885BE248E4FFA068FA3E6994CF0476407C175050B08000AD35EEB2D87E16CD3F95A0AEEBF2A049474275153D9D4DD44528FE99AA50E71660A15B0B768E1B90E609BBD5DC7AFAFD45D9705D72D40EA10C81141F30A4D728AB98B0950EC3B9815E6C8D43A7D5598314C15F113E49BCC4B9FFF43CD0366C23ACD82F75638012143FD9ED9A79DEA67CB5D585111FEF0A29203FA0408015141F30A4D728AB98B0950EC3B9815E6C8D43A7D5590010130101191486F0B1126CE1205E59FDFDD2661A9FB7505CA70F000000000000000000000000000000000000000014B5F762798A53D543A014CAF8B297CFF8F2F937E80000000000000000000000000000000000000000", + "binary": "12002D2400000009201B00000013301400000000000000016140000000009896806840000000000000147121ED7541DEC700470F54276C90C333A13CDBB5D341FD43C60CEA12170F6D6D4E11367321ED0406B134786FE0751717226657F7BF8AFE96442C05D28ACEC66FB64852BA604C7440D0423649E48A44F181262CF5FC08A68E7FA5CD9E55843E4F09014B76E602574741E8553383A4B43CABD194BB96713647FC0B885BE248E4FFA068FA3E6994CF0476407C175050B08000AD35EEB2D87E16CD3F95A0AEEBF2A049474275153D9D4DD44528FE99AA50E71660A15B0B768E1B90E609BBD5DC7AFAFD45D9705D72D40EA10C81141F30A4D728AB98B0950EC3B9815E6C8D43A7D5598314C15F113E49BCC4B9FFF43CD0366C23ACD82F75638012143FD9ED9A79DEA67CB5D585111FEF0A29203FA0408014141F30A4D728AB98B0950EC3B9815E6C8D43A7D5598015141F30A4D728AB98B0950EC3B9815E6C8D43A7D5590010130101191486F0B1126CE1205E59FDFDD2661A9FB7505CA70F000000000000000000000000000000000000000014B5F762798A53D543A014CAF8B297CFF8F2F937E80000000000000000000000000000000000000000", "json": { "Account": "rsqvD8WFFEBBv4nztpoW9YYXJ7eRzLrtc3", "Amount": "10000000", "AttestationRewardAccount": "rsqvD8WFFEBBv4nztpoW9YYXJ7eRzLrtc3", + "AttestationSignerAccount": "rsqvD8WFFEBBv4nztpoW9YYXJ7eRzLrtc3", "Destination": "rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi", "Fee": "20", "LastLedgerSequence": 19, diff --git a/packages/xrpl/src/models/transactions/common.ts b/packages/xrpl/src/models/transactions/common.ts index 5374d1e1..d1cc10be 100644 --- a/packages/xrpl/src/models/transactions/common.ts +++ b/packages/xrpl/src/models/transactions/common.ts @@ -118,12 +118,6 @@ export function isAmount(amount: unknown): amount is Amount { * @returns Whether the XChainBridge is properly formed. */ export function isXChainBridge(input: unknown): input is XChainBridge { - console.log(input) - console.log( - isRecord(input) && - Object.keys(input).length === XCHAIN_BRIDGE_SIZE && - typeof input.LockingChainDoor === 'string', - ) return ( isRecord(input) && Object.keys(input).length === XCHAIN_BRIDGE_SIZE &&