mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-04 21:15:47 +00:00
Compare commits
17 Commits
@transia/r
...
@transia/x
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f292d9e716 | ||
|
|
c167b3a22d | ||
|
|
baae6b9a9a | ||
|
|
25ab1d08fc | ||
|
|
9a0e2aa8f8 | ||
|
|
8779ef41d7 | ||
|
|
606babe01a | ||
|
|
4fbd5383c4 | ||
|
|
a97c7bb21b | ||
|
|
c00e36bf50 | ||
|
|
c24197f202 | ||
|
|
d50417acbc | ||
|
|
f8b7c6ab15 | ||
|
|
4447a7af09 | ||
|
|
678c5f5fda | ||
|
|
6264c5f3f7 | ||
|
|
62a39c69ce |
6
.github/workflows/codeql-analysis.yml
vendored
6
.github/workflows/codeql-analysis.yml
vendored
@@ -39,7 +39,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -64,4 +64,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
uses: github/codeql-action/analyze@v2
|
||||
|
||||
4294
package-lock.json
generated
4294
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -13,10 +13,10 @@
|
||||
"update:confirm": "npx npm-check-updates --configFileName .ncurc.json -u"
|
||||
},
|
||||
"dependencies": {
|
||||
"ripple-address-codec": "file:packages/ripple-address-codec",
|
||||
"ripple-binary-codec": "file:packages/ripple-binary-codec",
|
||||
"ripple-keypairs": "file:packages/ripple-keypairs",
|
||||
"xrpl": "file:packages/xrpl"
|
||||
"@transia/ripple-address-codec": "file:packages/ripple-address-codec",
|
||||
"@transia/ripple-binary-codec": "file:packages/ripple-binary-codec",
|
||||
"@transia/ripple-keypairs": "file:packages/ripple-keypairs",
|
||||
"@transia/xrpl": "file:packages/xrpl"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/brorand": "^1.0.30",
|
||||
|
||||
4
packages/ripple-address-codec/package-lock.json
generated
4
packages/ripple-address-codec/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ripple-address-codec",
|
||||
"version": "4.2.5",
|
||||
"version": "4.2.8-alpha.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ripple-address-codec",
|
||||
"version": "4.2.4",
|
||||
"version": "4.2.8-alpha.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"base-x": "^3.0.9",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ripple-address-codec",
|
||||
"version": "4.2.5",
|
||||
"name": "@transia/ripple-address-codec",
|
||||
"version": "4.2.8-alpha.0",
|
||||
"description": "encodes/decodes base58 encoded XRP Ledger identifiers",
|
||||
"files": [
|
||||
"dist/*",
|
||||
@@ -15,7 +15,7 @@
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@github.com:XRPLF/xrpl.js.git"
|
||||
"url": "git@github.com/Transia-RnD/xrpl.js/tree/beta"
|
||||
},
|
||||
"prepublish": "tsc -b",
|
||||
"prepublishOnly": "tslint -b ./ && jest",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ripple-binary-codec",
|
||||
"version": "1.4.3",
|
||||
"name": "@transia/ripple-binary-codec",
|
||||
"version": "1.4.6-alpha.0",
|
||||
"description": "XRP Ledger binary codec",
|
||||
"files": [
|
||||
"dist/*",
|
||||
@@ -12,12 +12,12 @@
|
||||
"test": "test"
|
||||
},
|
||||
"dependencies": {
|
||||
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
||||
"assert": "^2.0.0",
|
||||
"big-integer": "^1.6.48",
|
||||
"buffer": "5.6.0",
|
||||
"create-hash": "^1.2.0",
|
||||
"decimal.js": "^10.2.0",
|
||||
"ripple-address-codec": "^4.2.5"
|
||||
"decimal.js": "^10.2.0"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc -b && copyfiles ./src/enums/definitions.json ./dist/enums/",
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@github.com:XRPLF/xrpl.js.git"
|
||||
"url": "git@github.com/Transia-RnD/xrpl.js/tree/beta"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/XRPLF/xrpl.js/issues"
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"NegativeUNL": 78,
|
||||
"NFTokenPage": 80,
|
||||
"NFTokenOffer": 55,
|
||||
"URIToken": 85,
|
||||
"Any": -3,
|
||||
"Child": -2,
|
||||
"Nickname": 110,
|
||||
@@ -778,7 +779,7 @@
|
||||
[
|
||||
"LockCount",
|
||||
{
|
||||
"nth": 47,
|
||||
"nth": 49,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
@@ -1325,6 +1326,16 @@
|
||||
"type": "Hash256"
|
||||
}
|
||||
],
|
||||
[
|
||||
"URITokenID",
|
||||
{
|
||||
"nth": 36,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
"type": "Hash256"
|
||||
}
|
||||
],
|
||||
[
|
||||
"Amount",
|
||||
{
|
||||
@@ -2304,10 +2315,10 @@
|
||||
"temSEQ_AND_TICKET": -263,
|
||||
"temBAD_NFTOKEN_TRANSFER_FEE": -262,
|
||||
"temAMM_BAD_TOKENS": -261,
|
||||
"temEQUAL_DOOR_ACCOUNTS": -260,
|
||||
"temBAD_XCHAIN_PROOF": -259,
|
||||
"temSIDECHAIN_BAD_ISSUES": -258,
|
||||
"temSIDECHAIN_NONDOOR_OWNER": -257,
|
||||
"temXCHAIN_EQUAL_DOOR_ACCOUNTS": -260,
|
||||
"temXCHAIN_BAD_PROOF": -259,
|
||||
"temXCHAIN_BRIDGE_BAD_ISSUES": -258,
|
||||
"temXCHAIN_BRIDGE_NONDOOR_OWNER": -257,
|
||||
"temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT": -256,
|
||||
"temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT": -255,
|
||||
"temXCHAIN_TOO_MANY_ATTESTATIONS": -254,
|
||||
@@ -2348,7 +2359,8 @@
|
||||
"terNO_RIPPLE": -90,
|
||||
"terQUEUED": -89,
|
||||
"terPRE_TICKET": -88,
|
||||
"terNO_HOOK": -87,
|
||||
"terNO_AMM": -87,
|
||||
"terNO_HOOK": -86,
|
||||
|
||||
"tesSUCCESS": 0,
|
||||
|
||||
@@ -2455,6 +2467,11 @@
|
||||
"NFTokenCreateOffer": 27,
|
||||
"NFTokenCancelOffer": 28,
|
||||
"NFTokenAcceptOffer": 29,
|
||||
"URITokenMint": 45,
|
||||
"URITokenBurn": 46,
|
||||
"URITokenBuy": 47,
|
||||
"URITokenCreateSellOffer": 48,
|
||||
"URITokenCancelSellOffer": 49,
|
||||
"Invoke": 99,
|
||||
"EnableAmendment": 100,
|
||||
"SetFee": 101,
|
||||
|
||||
@@ -3,7 +3,7 @@ import {
|
||||
encodeAccountID,
|
||||
isValidXAddress,
|
||||
xAddressToClassicAddress,
|
||||
} from 'ripple-address-codec'
|
||||
} from '@transia/ripple-address-codec'
|
||||
import { Hash160 } from './hash-160'
|
||||
import { Buffer } from 'buffer/'
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import {
|
||||
XrplDefinitionsBase,
|
||||
} from '../enums'
|
||||
import { SerializedType, JsonObject } from './serialized-type'
|
||||
import { xAddressToClassicAddress, isValidXAddress } from 'ripple-address-codec'
|
||||
import { xAddressToClassicAddress, isValidXAddress } from '@transia/ripple-address-codec'
|
||||
import { BinaryParser } from '../serdes/binary-parser'
|
||||
import { BinarySerializer, BytesList } from '../serdes/binary-serializer'
|
||||
import { Buffer } from 'buffer/'
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const { coreTypes } = require('../src/types')
|
||||
const Decimal = require('decimal.js')
|
||||
|
||||
const { encodeAccountID } = require('ripple-address-codec')
|
||||
const { encodeAccountID } = require('@transia/ripple-address-codec')
|
||||
const { binary } = require('../src/coretypes')
|
||||
const { Amount, Hash160 } = coreTypes
|
||||
const { makeParser, readJSON } = binary
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ripple-keypairs",
|
||||
"version": "1.1.5",
|
||||
"name": "@transia/ripple-keypairs",
|
||||
"version": "1.1.8-alpha.0",
|
||||
"description": "Cryptographic key pairs for the XRP Ledger",
|
||||
"scripts": {
|
||||
"build": "tsc -b",
|
||||
@@ -17,15 +17,15 @@
|
||||
"test": "test"
|
||||
},
|
||||
"dependencies": {
|
||||
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
||||
"bn.js": "^5.1.1",
|
||||
"brorand": "^1.0.5",
|
||||
"elliptic": "^6.5.4",
|
||||
"hash.js": "^1.0.3",
|
||||
"ripple-address-codec": "^4.2.5"
|
||||
"hash.js": "^1.0.3"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@github.com:XRPLF/xrpl.js.git"
|
||||
"url": "git@github.com/Transia-RnD/xrpl.js/tree/beta"
|
||||
},
|
||||
"license": "ISC",
|
||||
"prettier": "@xrplf/prettier-config",
|
||||
|
||||
@@ -3,7 +3,7 @@ import brorand = require('brorand')
|
||||
import * as hashjs from 'hash.js'
|
||||
import * as elliptic from 'elliptic'
|
||||
|
||||
import * as addressCodec from 'ripple-address-codec'
|
||||
import * as addressCodec from '@transia/ripple-address-codec'
|
||||
import { derivePrivateKey, accountPublicFromPublicGenerator } from './secp256k1'
|
||||
import * as utils from './utils'
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import assert from 'assert'
|
||||
import * as api from 'ripple-address-codec'
|
||||
import * as api from '@transia/ripple-address-codec'
|
||||
|
||||
function toHex(bytes) {
|
||||
return Buffer.from(bytes).toString('hex').toUpperCase()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import assert from 'assert'
|
||||
import * as api from 'ripple-address-codec'
|
||||
import * as api from '@transia/ripple-address-codec'
|
||||
|
||||
function toHex(bytes: Buffer) {
|
||||
return Buffer.from(bytes).toString('hex').toUpperCase()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "xrpl",
|
||||
"version": "2.7.0",
|
||||
"name": "@transia/xrpl",
|
||||
"version": "2.7.3-alpha.0",
|
||||
"license": "ISC",
|
||||
"description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser",
|
||||
"files": [
|
||||
@@ -22,14 +22,14 @@
|
||||
"https-proxy-agent": false
|
||||
},
|
||||
"dependencies": {
|
||||
"@transia/ripple-address-codec": "^4.2.8-alpha.0",
|
||||
"@transia/ripple-binary-codec": "^1.4.6-alpha.0",
|
||||
"@transia/ripple-keypairs": "^1.1.8-alpha.0",
|
||||
"bignumber.js": "^9.0.0",
|
||||
"bip32": "^2.0.6",
|
||||
"bip39": "^3.0.4",
|
||||
"https-proxy-agent": "^5.0.0",
|
||||
"lodash": "^4.17.4",
|
||||
"ripple-address-codec": "^4.2.5",
|
||||
"ripple-binary-codec": "^1.4.3",
|
||||
"ripple-keypairs": "^1.1.5",
|
||||
"ws": "^8.2.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -75,7 +75,7 @@
|
||||
"prettier": "@xrplf/prettier-config",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@github.com:XRPLF/xrpl.js.git"
|
||||
"url": "git@github.com/Transia-RnD/xrpl.js/tree/beta"
|
||||
},
|
||||
"readmeFilename": "README.md",
|
||||
"engines": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { IncomingMessage } from 'http'
|
||||
import { request as httpsRequest, RequestOptions } from 'https'
|
||||
|
||||
import { isValidClassicAddress } from 'ripple-address-codec'
|
||||
import { isValidClassicAddress } from '@transia/ripple-address-codec'
|
||||
|
||||
import type { Client } from '../client'
|
||||
import { RippledError, XRPLFaucetError } from '../errors'
|
||||
|
||||
@@ -9,20 +9,20 @@ import {
|
||||
isValidXAddress,
|
||||
xAddressToClassicAddress,
|
||||
encodeSeed,
|
||||
} from 'ripple-address-codec'
|
||||
} from '@transia/ripple-address-codec'
|
||||
import {
|
||||
decode,
|
||||
encodeForSigning,
|
||||
encodeForMultisigning,
|
||||
encode,
|
||||
} from 'ripple-binary-codec'
|
||||
} from '@transia/ripple-binary-codec'
|
||||
import {
|
||||
deriveAddress,
|
||||
deriveKeypair,
|
||||
generateSeed,
|
||||
verify,
|
||||
sign,
|
||||
} from 'ripple-keypairs'
|
||||
} from '@transia/ripple-keypairs'
|
||||
|
||||
import ECDSA from '../ECDSA'
|
||||
import { ValidationError, XrplError } from '../errors'
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { BigNumber } from 'bignumber.js'
|
||||
import { flatMap } from 'lodash'
|
||||
import { decodeAccountID } from 'ripple-address-codec'
|
||||
import { decodeAccountID } from '@transia/ripple-address-codec'
|
||||
import {
|
||||
decode,
|
||||
encode,
|
||||
encodeForSigning,
|
||||
encodeForSigningClaim,
|
||||
} from 'ripple-binary-codec'
|
||||
import { sign as signWithKeypair, verify } from 'ripple-keypairs'
|
||||
} from '@transia/ripple-binary-codec'
|
||||
import { sign as signWithKeypair, verify } from '@transia/ripple-keypairs'
|
||||
|
||||
import { ValidationError } from '../errors'
|
||||
import { Signer } from '../models/common'
|
||||
|
||||
@@ -101,6 +101,7 @@ import {
|
||||
getXrpBalance,
|
||||
submit,
|
||||
submitAndWait,
|
||||
getNetworkID,
|
||||
} from '../sugar'
|
||||
import fundWallet from '../Wallet/fundWallet'
|
||||
|
||||
@@ -200,6 +201,13 @@ class Client extends EventEmitter {
|
||||
*/
|
||||
public readonly maxFeeXRP: string
|
||||
|
||||
/**
|
||||
* Network ID of the server this sdk is connected to
|
||||
*
|
||||
* @category Fee
|
||||
*/
|
||||
public networkID: number
|
||||
|
||||
/**
|
||||
* Creates a new Client with a websocket connection to a rippled server.
|
||||
*
|
||||
@@ -218,6 +226,7 @@ class Client extends EventEmitter {
|
||||
|
||||
this.feeCushion = options.feeCushion ?? DEFAULT_FEE_CUSHION
|
||||
this.maxFeeXRP = options.maxFeeXRP ?? DEFAULT_MAX_FEE_XRP
|
||||
this.networkID = 1
|
||||
|
||||
this.connection = new Connection(server, options)
|
||||
|
||||
@@ -634,6 +643,11 @@ class Client extends EventEmitter {
|
||||
*/
|
||||
public getLedgerIndex = getLedgerIndex
|
||||
|
||||
/**
|
||||
* @category Abstraction
|
||||
*/
|
||||
public getNetworkID = getNetworkID
|
||||
|
||||
/**
|
||||
* @category Faucet
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import BigNumber from 'bignumber.js'
|
||||
import { decode } from 'ripple-binary-codec'
|
||||
import { decode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import type {
|
||||
AccountTxResponse,
|
||||
|
||||
@@ -97,14 +97,15 @@ export interface Hook {
|
||||
* The object that describes the hook in Hooks.
|
||||
*/
|
||||
Hook: {
|
||||
HookHash?: string
|
||||
/**
|
||||
* The code that is executed when the hook is triggered.
|
||||
*/
|
||||
CreateCode: string
|
||||
CreateCode?: string
|
||||
/**
|
||||
* The flags that are set on the hook.
|
||||
*/
|
||||
Flags: number
|
||||
Flags?: number
|
||||
/**
|
||||
* The transactions that triggers the hook. Represented as a 256Hash
|
||||
*/
|
||||
|
||||
@@ -136,6 +136,10 @@ export interface ServerInfoResponse extends BaseResponse {
|
||||
* overall network's load factor.
|
||||
*/
|
||||
load_factor?: number
|
||||
/**
|
||||
* The network id of the server.
|
||||
*/
|
||||
network_id?: number
|
||||
/**
|
||||
* Current multiplier to the transaction cost based on
|
||||
* load to this server.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* eslint-disable complexity -- Necessary for validateAccountSet */
|
||||
|
||||
import { isValidClassicAddress } from 'ripple-address-codec'
|
||||
import { isValidClassicAddress } from '@transia/ripple-address-codec'
|
||||
|
||||
import { ValidationError } from '../../errors'
|
||||
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
/* eslint-disable max-lines-per-function -- Necessary for validateBaseTransaction */
|
||||
/* eslint-disable complexity -- Necessary for validateBaseTransaction */
|
||||
/* eslint-disable max-statements -- Necessary for validateBaseTransaction */
|
||||
import { TRANSACTION_TYPES } from 'ripple-binary-codec'
|
||||
import { TRANSACTION_TYPES } from '@transia/ripple-binary-codec'
|
||||
|
||||
import { ValidationError } from '../../errors'
|
||||
import { Amount, IssuedCurrencyAmount, Memo, Signer } from '../common'
|
||||
import {
|
||||
Amount,
|
||||
HookParameter,
|
||||
IssuedCurrencyAmount,
|
||||
Memo,
|
||||
Signer,
|
||||
} from '../common'
|
||||
import { onlyHasFields } from '../utils'
|
||||
|
||||
const MEMO_SIZE = 3
|
||||
@@ -159,6 +165,14 @@ export interface BaseTransaction {
|
||||
* account it says it is from.
|
||||
*/
|
||||
TxnSignature?: string
|
||||
/**
|
||||
* The network id of the transaction.
|
||||
*/
|
||||
NetworkID?: number
|
||||
/**
|
||||
* The hook parameters of the transaction.
|
||||
*/
|
||||
HookParameters?: HookParameter[]
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -252,6 +266,9 @@ export function validateBaseTransaction(common: Record<string, unknown>): void {
|
||||
) {
|
||||
throw new ValidationError('BaseTransaction: invalid TxnSignature')
|
||||
}
|
||||
if (common.NetworkID !== undefined && typeof common.NetworkID !== 'number') {
|
||||
throw new ValidationError('BaseTransaction: invalid NetworkID')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -43,7 +43,7 @@ export {
|
||||
export { PaymentChannelCreate } from './paymentChannelCreate'
|
||||
export { PaymentChannelFund } from './paymentChannelFund'
|
||||
export { SetRegularKey } from './setRegularKey'
|
||||
export { SetHook } from './setHook'
|
||||
export { SetHookFlagsInterface, SetHookFlags, SetHook } from './setHook'
|
||||
export { SignerListSet } from './signerListSet'
|
||||
export { TicketCreate } from './ticketCreate'
|
||||
export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet'
|
||||
|
||||
@@ -13,6 +13,10 @@ export interface Invoke extends BaseTransaction {
|
||||
* If present, invokes the Hook on the Destination account.
|
||||
*/
|
||||
Destination?: string
|
||||
/**
|
||||
* Hex value representing a VL Blob.
|
||||
*/
|
||||
Blob?: string
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
import { Amount } from '../common'
|
||||
|
||||
export interface HookExecution {
|
||||
HookExecution: {
|
||||
HookAccount: string
|
||||
HookEmitCount: number
|
||||
HookExecutionIndex: number
|
||||
HookHash: string
|
||||
HookInstructionCount: string
|
||||
HookResult: number
|
||||
HookReturnCode: number
|
||||
HookReturnString: string
|
||||
HookStateChangeCount: number
|
||||
}
|
||||
}
|
||||
|
||||
export interface CreatedNode {
|
||||
CreatedNode: {
|
||||
LedgerEntryType: string
|
||||
@@ -60,6 +74,7 @@ export function isDeletedNode(node: Node): node is DeletedNode {
|
||||
}
|
||||
|
||||
export interface TransactionMetadata {
|
||||
HookExecutions: HookExecution[]
|
||||
AffectedNodes: Node[]
|
||||
DeliveredAmount?: Amount
|
||||
// "unavailable" possible for transactions before 2014-01-20
|
||||
|
||||
@@ -1,7 +1,30 @@
|
||||
import { ValidationError } from '../../errors'
|
||||
import { Hook } from '../common'
|
||||
|
||||
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||
import { BaseTransaction, GlobalFlags, validateBaseTransaction } from './common'
|
||||
|
||||
/**
|
||||
* Enum representing values for Set Hook Transaction Flags.
|
||||
*
|
||||
* @category Transaction Flags
|
||||
*/
|
||||
export enum SetHookFlags {
|
||||
/**
|
||||
*/
|
||||
hsfOverride = 0x00000001,
|
||||
/**
|
||||
*/
|
||||
hsfNSDelete = 0x00000010,
|
||||
/**
|
||||
*/
|
||||
hsfCollect = 0x00000100,
|
||||
}
|
||||
|
||||
export interface SetHookFlagsInterface extends GlobalFlags {
|
||||
hsfOverride?: boolean
|
||||
hsfNSDelete?: boolean
|
||||
hsfCollect?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -14,6 +37,8 @@ export interface SetHook extends BaseTransaction {
|
||||
*
|
||||
*/
|
||||
Hooks: Hook[]
|
||||
|
||||
Flags?: number | SetHookFlagsInterface
|
||||
}
|
||||
|
||||
const MAX_HOOKS = 4
|
||||
|
||||
@@ -13,6 +13,7 @@ import { DepositPreauth, validateDepositPreauth } from './depositPreauth'
|
||||
import { EscrowCancel, validateEscrowCancel } from './escrowCancel'
|
||||
import { EscrowCreate, validateEscrowCreate } from './escrowCreate'
|
||||
import { EscrowFinish, validateEscrowFinish } from './escrowFinish'
|
||||
import { Invoke, validateInvoke } from './invoke'
|
||||
import { TransactionMetadata } from './metadata'
|
||||
import {
|
||||
NFTokenAcceptOffer,
|
||||
@@ -62,6 +63,7 @@ export type Transaction =
|
||||
| EscrowCancel
|
||||
| EscrowCreate
|
||||
| EscrowFinish
|
||||
| Invoke
|
||||
| NFTokenAcceptOffer
|
||||
| NFTokenBurn
|
||||
| NFTokenCancelOffer
|
||||
@@ -142,6 +144,10 @@ export function validate(transaction: Record<string, unknown>): void {
|
||||
validateEscrowFinish(tx)
|
||||
break
|
||||
|
||||
case 'Invoke':
|
||||
validateInvoke(tx)
|
||||
break
|
||||
|
||||
case 'NFTokenAcceptOffer':
|
||||
validateNFTokenAcceptOffer(tx)
|
||||
break
|
||||
|
||||
@@ -20,6 +20,7 @@ import {
|
||||
PaymentChannelClaimFlagsInterface,
|
||||
PaymentChannelClaimFlags,
|
||||
} from '../transactions/paymentChannelClaim'
|
||||
import { SetHookFlagsInterface, SetHookFlags } from '../transactions/setHook'
|
||||
import type { Transaction } from '../transactions/transaction'
|
||||
import { TrustSetFlagsInterface, TrustSetFlags } from '../transactions/trustSet'
|
||||
|
||||
@@ -75,6 +76,15 @@ export function setTransactionFlagsToNumber(tx: Transaction): void {
|
||||
case 'TrustSet':
|
||||
tx.Flags = convertTrustSetFlagsToNumber(tx.Flags)
|
||||
return
|
||||
case 'SetHook':
|
||||
tx.Flags = convertSetHookFlagsToNumber(tx.Flags)
|
||||
tx.Hooks.forEach((h) => {
|
||||
h.Hook.Flags = convertSetHookFlagsToNumber(
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- idk
|
||||
h.Hook.Flags as SetHookFlagsInterface,
|
||||
)
|
||||
})
|
||||
return
|
||||
default:
|
||||
tx.Flags = 0
|
||||
}
|
||||
@@ -108,6 +118,10 @@ function convertTrustSetFlagsToNumber(flags: TrustSetFlagsInterface): number {
|
||||
return reduceFlags(flags, TrustSetFlags)
|
||||
}
|
||||
|
||||
function convertSetHookFlagsToNumber(flags: SetHookFlagsInterface): number {
|
||||
return reduceFlags(flags, SetHookFlags)
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- added ValidationError check for flagEnum
|
||||
function reduceFlags(flags: GlobalFlags, flagEnum: any): number {
|
||||
return Object.keys(flags).reduce((resultFlags, flag) => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import BigNumber from 'bignumber.js'
|
||||
import { xAddressToClassicAddress, isValidXAddress } from 'ripple-address-codec'
|
||||
import { xAddressToClassicAddress, isValidXAddress } from '@transia/ripple-address-codec'
|
||||
|
||||
import type { Client } from '..'
|
||||
import { ValidationError, XrplError } from '../errors'
|
||||
@@ -12,6 +12,7 @@ import { getFeeXrp } from './getFeeXrp'
|
||||
|
||||
// Expire unconfirmed transactions after 20 ledger versions, approximately 1 minute, by default
|
||||
const LEDGER_OFFSET = 20
|
||||
const RESTRICTED_NETWORKS = 1024
|
||||
interface ClassicAccountAndTag {
|
||||
classicAccount: string
|
||||
tag: number | false | undefined
|
||||
@@ -39,8 +40,10 @@ async function autofill<T extends Transaction>(
|
||||
setValidAddresses(tx)
|
||||
|
||||
setTransactionFlagsToNumber(tx)
|
||||
|
||||
const promises: Array<Promise<void>> = []
|
||||
if (this.networkID > RESTRICTED_NETWORKS && tx.NetworkID == null) {
|
||||
tx.NetworkID = this.networkID
|
||||
}
|
||||
if (tx.Sequence == null) {
|
||||
promises.push(setNextValidSequenceNumber(this, tx))
|
||||
}
|
||||
|
||||
15
packages/xrpl/src/sugar/getNetworkID.ts
Normal file
15
packages/xrpl/src/sugar/getNetworkID.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import type { Client } from '..'
|
||||
// import { XrplError } from '../errors'
|
||||
|
||||
/**
|
||||
* Returns the network ID of the rippled server.
|
||||
*
|
||||
* @param this - The Client used to connect to the ledger.
|
||||
* @returns The network id.
|
||||
*/
|
||||
export default async function getNetworkID(this: Client): Promise<number> {
|
||||
const response = await this.request({
|
||||
command: 'server_info',
|
||||
})
|
||||
return response.result.info.network_id ?? 1
|
||||
}
|
||||
@@ -7,6 +7,8 @@ export { default as getLedgerIndex } from './getLedgerIndex'
|
||||
export { default as getOrderbook } from './getOrderbook'
|
||||
export { getFeeXrp, getFeeEstimateXrp } from './getFeeXrp'
|
||||
|
||||
export { default as getNetworkID } from './getNetworkID'
|
||||
|
||||
export * from './submit'
|
||||
|
||||
export * from './utils'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { decode, encode } from 'ripple-binary-codec'
|
||||
import { decode, encode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import type { Client, SubmitRequest, SubmitResponse, Wallet } from '..'
|
||||
import { ValidationError, XrplError } from '../errors'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { xAddressToClassicAddress, isValidXAddress } from 'ripple-address-codec'
|
||||
import { xAddressToClassicAddress, isValidXAddress } from '@transia/ripple-address-codec'
|
||||
|
||||
/**
|
||||
* If an address is an X-Address, converts it to a classic address.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { classicAddressToXAddress } from 'ripple-address-codec'
|
||||
import { deriveKeypair, deriveAddress } from 'ripple-keypairs'
|
||||
import { classicAddressToXAddress } from '@transia/ripple-address-codec'
|
||||
import { deriveKeypair, deriveAddress } from '@transia/ripple-keypairs'
|
||||
|
||||
/**
|
||||
* Derive an X-Address from a public key and a destination tag.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
bitwise operators for and-ing numbers with a mask and bit shifting. */
|
||||
|
||||
import BigNumber from 'bignumber.js'
|
||||
import { decode, encode } from 'ripple-binary-codec'
|
||||
import { decode, encode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import { ValidationError, XrplError } from '../../errors'
|
||||
import type { Ledger } from '../../models/ledger'
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
bitwise operators for and-ing numbers with a mask and bit shifting. */
|
||||
|
||||
import BigNumber from 'bignumber.js'
|
||||
import { decodeAccountID } from 'ripple-address-codec'
|
||||
import { decodeAccountID } from '@transia/ripple-address-codec'
|
||||
|
||||
import hashLedger, {
|
||||
hashLedgerHeader,
|
||||
|
||||
@@ -4,9 +4,11 @@
|
||||
* This module contains the transaction types and the function to calculate the hook on
|
||||
*/
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-require-imports -- Required
|
||||
import {
|
||||
TRANSACTION_TYPES,
|
||||
TRANSACTION_TYPE_MAP,
|
||||
} from '@transia/ripple-binary-codec'
|
||||
import createHash = require('create-hash')
|
||||
import { TRANSACTION_TYPES, TRANSACTION_TYPE_MAP } from 'ripple-binary-codec'
|
||||
|
||||
import { XrplError } from '../errors'
|
||||
import { HookParameter } from '../models/common'
|
||||
@@ -42,7 +44,7 @@ export function calculateHookOn(arr: Array<keyof TTS>): string {
|
||||
`invalid transaction type '${String(nth)}' in HookOn array`,
|
||||
)
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- Required
|
||||
|
||||
const tts: Record<string, number> = TRANSACTION_TYPE_MAP
|
||||
let value = BigInt(hash)
|
||||
// eslint-disable-next-line no-bitwise -- Required
|
||||
@@ -84,6 +86,14 @@ export async function hexNamespace(namespace: string): Promise<string> {
|
||||
return (await sha256(namespace)).toUpperCase()
|
||||
}
|
||||
|
||||
function isHex(value: string): boolean {
|
||||
return /^[0-9A-F]+$/iu.test(value)
|
||||
}
|
||||
|
||||
function hexValue(value: string): string {
|
||||
return Buffer.from(value, 'utf8').toString('hex').toUpperCase()
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the hex of the hook parameters
|
||||
*
|
||||
@@ -93,20 +103,21 @@ export async function hexNamespace(namespace: string): Promise<string> {
|
||||
export function hexHookParameters(data: HookParameter[]): HookParameter[] {
|
||||
const hookParameters: HookParameter[] = []
|
||||
for (const parameter of data) {
|
||||
let hookPName = parameter.HookParameter.HookParameterName
|
||||
let hookPValue = parameter.HookParameter.HookParameterValue
|
||||
|
||||
if (!isHex(hookPName)) {
|
||||
hookPName = hexValue(hookPName)
|
||||
}
|
||||
|
||||
if (!isHex(hookPValue)) {
|
||||
hookPValue = hexValue(hookPValue)
|
||||
}
|
||||
|
||||
hookParameters.push({
|
||||
HookParameter: {
|
||||
HookParameterName: Buffer.from(
|
||||
parameter.HookParameter.HookParameterName,
|
||||
'utf8',
|
||||
)
|
||||
.toString('hex')
|
||||
.toUpperCase(),
|
||||
HookParameterValue: Buffer.from(
|
||||
parameter.HookParameter.HookParameterValue,
|
||||
'utf8',
|
||||
)
|
||||
.toString('hex')
|
||||
.toUpperCase(),
|
||||
HookParameterName: hookPName,
|
||||
HookParameterValue: hookPValue,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ import {
|
||||
isValidClassicAddress,
|
||||
isValidXAddress,
|
||||
xAddressToClassicAddress,
|
||||
} from 'ripple-address-codec'
|
||||
import * as rbc from 'ripple-binary-codec'
|
||||
import { verify as verifyKeypairSignature } from 'ripple-keypairs'
|
||||
} from '@transia/ripple-address-codec'
|
||||
import * as rbc from '@transia/ripple-binary-codec'
|
||||
import { verify as verifyKeypairSignature } from '@transia/ripple-keypairs'
|
||||
|
||||
import { LedgerEntry } from '../models/ledger'
|
||||
import { Response } from '../models/methods'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* eslint-disable @typescript-eslint/no-magic-numbers -- Doing hex string parsing. */
|
||||
import BigNumber from 'bignumber.js'
|
||||
import { encodeAccountID } from 'ripple-address-codec'
|
||||
import { encodeAccountID } from '@transia/ripple-address-codec'
|
||||
|
||||
import { XrplError } from '../errors'
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { encodeForSigningClaim } from 'ripple-binary-codec'
|
||||
import { sign } from 'ripple-keypairs'
|
||||
import { encodeForSigningClaim } from '@transia/ripple-binary-codec'
|
||||
import { sign } from '@transia/ripple-keypairs'
|
||||
|
||||
import { xrpToDrops } from './xrpConversion'
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { encodeForSigningClaim } from 'ripple-binary-codec'
|
||||
import { verify } from 'ripple-keypairs'
|
||||
import { encodeForSigningClaim } from '@transia/ripple-binary-codec'
|
||||
import { verify } from '@transia/ripple-keypairs'
|
||||
|
||||
import { xrpToDrops } from './xrpConversion'
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { assert } from 'chai'
|
||||
import { decode } from 'ripple-binary-codec'
|
||||
import { decode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import {
|
||||
AccountSet,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { assert } from 'chai'
|
||||
import { decode } from 'ripple-binary-codec'
|
||||
import { decode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import {
|
||||
AccountSet,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { assert } from 'chai'
|
||||
import omit from 'lodash/omit'
|
||||
import throttle from 'lodash/throttle'
|
||||
import { decode } from 'ripple-binary-codec'
|
||||
import { decode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import {
|
||||
Client,
|
||||
|
||||
@@ -23,7 +23,7 @@ describe('SetHook', function () {
|
||||
CreateCode:
|
||||
'0061736D01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F670002030201030503010002062B077F0141B088040B7F004180080B7F0041A6080B7F004180080B7F0041B088040B7F0041000B7F0041010B07080104686F6F6B00030AC4800001C0800001017F230041106B220124002001200036020C41920841134180084112410010001A410022002000420010011A41012200200010021A200141106A240042000B0B2C01004180080B254163636570742E633A2043616C6C65642E00224163636570742E633A2043616C6C65642E22',
|
||||
HookOn:
|
||||
'000000000000000000000000000000000000000000000000000000003E3FF5B7',
|
||||
'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFF7',
|
||||
Flags: 1,
|
||||
HookApiVersion: 0,
|
||||
HookNamespace:
|
||||
@@ -76,7 +76,7 @@ describe('SetHook', function () {
|
||||
CreateCode:
|
||||
'0061736D01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F670002030201030503010002062B077F0141B088040B7F004180080B7F0041A6080B7F004180080B7F0041B088040B7F0041000B7F0041010B07080104686F6F6B00030AC4800001C0800001017F230041106B220124002001200036020C41920841134180084112410010001A410022002000420010011A41012200200010021A200141106A240042000B0B2C01004180080B254163636570742E633A2043616C6C65642E00224163636570742E633A2043616C6C65642E22',
|
||||
HookOn:
|
||||
'000000000000000000000000000000000000000000000000000000003E3FF5B7',
|
||||
'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFF7',
|
||||
Flags: 1,
|
||||
HookApiVersion: 0,
|
||||
HookNamespace:
|
||||
@@ -131,7 +131,7 @@ describe('SetHook', function () {
|
||||
CreateCode:
|
||||
'0061736D01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F670002030201030503010002062B077F0141B088040B7F004180080B7F0041A6080B7F004180080B7F0041B088040B7F0041000B7F0041010B07080104686F6F6B00030AC4800001C0800001017F230041106B220124002001200036020C41920841134180084112410010001A410022002000420010011A41012200200010021A200141106A240042000B0B2C01004180080B254163636570742E633A2043616C6C65642E00224163636570742E633A2043616C6C65642E22',
|
||||
HookOn:
|
||||
'000000000000000000000000000000000000000000000000000000003E3FF5B7',
|
||||
'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFF7',
|
||||
Flags: 1,
|
||||
HookApiVersion: 0,
|
||||
HookNamespace: '',
|
||||
|
||||
@@ -2,7 +2,7 @@ import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
import { assert } from 'chai'
|
||||
import { encode } from 'ripple-binary-codec'
|
||||
import { encode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import { OfferCreate, Transaction, ValidationError } from '../../src'
|
||||
import {
|
||||
|
||||
@@ -18,7 +18,7 @@ describe('test hook on', function () {
|
||||
const result = calculateHookOn([])
|
||||
assert.equal(
|
||||
result,
|
||||
'000000000000000000000000000000000000000000000000000000003E3FF5BF',
|
||||
'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFF',
|
||||
)
|
||||
})
|
||||
it('one', function () {
|
||||
@@ -26,7 +26,7 @@ describe('test hook on', function () {
|
||||
const result = calculateHookOn(invokeOn)
|
||||
assert.equal(
|
||||
result,
|
||||
'000000000000000000000000000000000000000000000000000000003E3FF5B7',
|
||||
'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFF7',
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { assert } from 'chai'
|
||||
import { decode } from 'ripple-binary-codec'
|
||||
import { decode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import { NFTokenMint, Payment, Transaction } from '../../src'
|
||||
import ECDSA from '../../src/ECDSA'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { assert } from 'chai'
|
||||
import { decode, encode } from 'ripple-binary-codec'
|
||||
import { decode, encode } from '@transia/ripple-binary-codec'
|
||||
|
||||
import { Transaction, ValidationError } from '../../src'
|
||||
import Wallet from '../../src/Wallet'
|
||||
|
||||
Reference in New Issue
Block a user