xrpl 2.9.1 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/xrpl-latest-min.js +1 -1
- package/build/xrpl-latest-min.js.map +1 -1
- package/build/xrpl-latest.js +2680 -481
- package/build/xrpl-latest.js.map +1 -1
- package/dist/npm/Wallet/walletFromSecretNumbers.d.ts +7 -0
- package/dist/npm/Wallet/walletFromSecretNumbers.d.ts.map +1 -0
- package/dist/npm/Wallet/walletFromSecretNumbers.js +27 -0
- package/dist/npm/Wallet/walletFromSecretNumbers.js.map +1 -0
- package/dist/npm/client/index.d.ts +2 -1
- package/dist/npm/client/index.d.ts.map +1 -1
- package/dist/npm/client/index.js.map +1 -1
- package/dist/npm/index.d.ts +1 -0
- package/dist/npm/index.d.ts.map +1 -1
- package/dist/npm/index.js +3 -1
- package/dist/npm/index.js.map +1 -1
- package/dist/npm/models/common/index.d.ts +5 -0
- package/dist/npm/models/common/index.d.ts.map +1 -1
- package/dist/npm/models/ledger/AMM.d.ts +27 -0
- package/dist/npm/models/ledger/AMM.d.ts.map +1 -0
- package/dist/npm/models/ledger/AMM.js +3 -0
- package/dist/npm/models/ledger/AMM.js.map +1 -0
- package/dist/npm/models/ledger/AccountRoot.d.ts +5 -1
- package/dist/npm/models/ledger/AccountRoot.d.ts.map +1 -1
- package/dist/npm/models/ledger/AccountRoot.js +2 -0
- package/dist/npm/models/ledger/AccountRoot.js.map +1 -1
- package/dist/npm/models/ledger/LedgerEntry.d.ts +2 -1
- package/dist/npm/models/ledger/LedgerEntry.d.ts.map +1 -1
- package/dist/npm/models/methods/accountInfo.d.ts +1 -0
- package/dist/npm/models/methods/accountInfo.d.ts.map +1 -1
- package/dist/npm/models/methods/ammInfo.d.ts +39 -0
- package/dist/npm/models/methods/ammInfo.d.ts.map +1 -0
- package/dist/npm/models/methods/ammInfo.js +3 -0
- package/dist/npm/models/methods/ammInfo.js.map +1 -0
- package/dist/npm/models/methods/index.d.ts +4 -3
- package/dist/npm/models/methods/index.d.ts.map +1 -1
- package/dist/npm/models/methods/ledgerEntry.d.ts +10 -0
- package/dist/npm/models/methods/ledgerEntry.d.ts.map +1 -1
- package/dist/npm/models/transactions/AMMBid.d.ts +12 -0
- package/dist/npm/models/transactions/AMMBid.d.ts.map +1 -0
- package/dist/npm/models/transactions/AMMBid.js +56 -0
- package/dist/npm/models/transactions/AMMBid.js.map +1 -0
- package/dist/npm/models/transactions/AMMCreate.d.ts +11 -0
- package/dist/npm/models/transactions/AMMCreate.d.ts.map +1 -0
- package/dist/npm/models/transactions/AMMCreate.js +32 -0
- package/dist/npm/models/transactions/AMMCreate.js.map +1 -0
- package/dist/npm/models/transactions/AMMDelete.d.ts +9 -0
- package/dist/npm/models/transactions/AMMDelete.d.ts.map +1 -0
- package/dist/npm/models/transactions/AMMDelete.js +22 -0
- package/dist/npm/models/transactions/AMMDelete.js.map +1 -0
- package/dist/npm/models/transactions/AMMDeposit.d.ts +27 -0
- package/dist/npm/models/transactions/AMMDeposit.d.ts.map +1 -0
- package/dist/npm/models/transactions/AMMDeposit.js +51 -0
- package/dist/npm/models/transactions/AMMDeposit.js.map +1 -0
- package/dist/npm/models/transactions/AMMVote.d.ts +10 -0
- package/dist/npm/models/transactions/AMMVote.d.ts.map +1 -0
- package/dist/npm/models/transactions/AMMVote.js +32 -0
- package/dist/npm/models/transactions/AMMVote.js.map +1 -0
- package/dist/npm/models/transactions/AMMWithdraw.d.ts +31 -0
- package/dist/npm/models/transactions/AMMWithdraw.d.ts.map +1 -0
- package/dist/npm/models/transactions/AMMWithdraw.js +50 -0
- package/dist/npm/models/transactions/AMMWithdraw.js.map +1 -0
- package/dist/npm/models/transactions/accountSet.d.ts +2 -1
- package/dist/npm/models/transactions/accountSet.d.ts.map +1 -1
- package/dist/npm/models/transactions/accountSet.js +1 -0
- package/dist/npm/models/transactions/accountSet.js.map +1 -1
- package/dist/npm/models/transactions/clawback.d.ts +9 -0
- package/dist/npm/models/transactions/clawback.d.ts.map +1 -0
- package/dist/npm/models/transactions/clawback.js +19 -0
- package/dist/npm/models/transactions/clawback.js.map +1 -0
- package/dist/npm/models/transactions/common.d.ts +2 -1
- package/dist/npm/models/transactions/common.d.ts.map +1 -1
- package/dist/npm/models/transactions/common.js +12 -1
- package/dist/npm/models/transactions/common.js.map +1 -1
- package/dist/npm/models/transactions/index.d.ts +7 -0
- package/dist/npm/models/transactions/index.d.ts.map +1 -1
- package/dist/npm/models/transactions/index.js +5 -1
- package/dist/npm/models/transactions/index.js.map +1 -1
- package/dist/npm/models/transactions/transaction.d.ts +8 -1
- package/dist/npm/models/transactions/transaction.d.ts.map +1 -1
- package/dist/npm/models/transactions/transaction.js +28 -0
- package/dist/npm/models/transactions/transaction.js.map +1 -1
- package/dist/npm/models/utils/flags.d.ts.map +1 -1
- package/dist/npm/models/utils/flags.js +17 -23
- package/dist/npm/models/utils/flags.js.map +1 -1
- package/dist/npm/models/utils/index.js +1 -1
- package/dist/npm/models/utils/index.js.map +1 -1
- package/dist/npm/snippets/tsconfig.tsbuildinfo +1 -1
- package/dist/npm/src/Wallet/walletFromSecretNumbers.d.ts +7 -0
- package/dist/npm/src/Wallet/walletFromSecretNumbers.d.ts.map +1 -0
- package/dist/npm/src/Wallet/walletFromSecretNumbers.js +27 -0
- package/dist/npm/src/Wallet/walletFromSecretNumbers.js.map +1 -0
- package/dist/npm/src/client/index.d.ts +2 -1
- package/dist/npm/src/client/index.d.ts.map +1 -1
- package/dist/npm/src/client/index.js.map +1 -1
- package/dist/npm/src/index.d.ts +1 -0
- package/dist/npm/src/index.d.ts.map +1 -1
- package/dist/npm/src/index.js +3 -1
- package/dist/npm/src/index.js.map +1 -1
- package/dist/npm/src/models/common/index.d.ts +5 -0
- package/dist/npm/src/models/common/index.d.ts.map +1 -1
- package/dist/npm/src/models/ledger/AMM.d.ts +27 -0
- package/dist/npm/src/models/ledger/AMM.d.ts.map +1 -0
- package/dist/npm/src/models/ledger/AMM.js +3 -0
- package/dist/npm/src/models/ledger/AMM.js.map +1 -0
- package/dist/npm/src/models/ledger/AccountRoot.d.ts +5 -1
- package/dist/npm/src/models/ledger/AccountRoot.d.ts.map +1 -1
- package/dist/npm/src/models/ledger/AccountRoot.js +2 -0
- package/dist/npm/src/models/ledger/AccountRoot.js.map +1 -1
- package/dist/npm/src/models/ledger/LedgerEntry.d.ts +2 -1
- package/dist/npm/src/models/ledger/LedgerEntry.d.ts.map +1 -1
- package/dist/npm/src/models/methods/accountInfo.d.ts +1 -0
- package/dist/npm/src/models/methods/accountInfo.d.ts.map +1 -1
- package/dist/npm/src/models/methods/ammInfo.d.ts +39 -0
- package/dist/npm/src/models/methods/ammInfo.d.ts.map +1 -0
- package/dist/npm/src/models/methods/ammInfo.js +3 -0
- package/dist/npm/src/models/methods/ammInfo.js.map +1 -0
- package/dist/npm/src/models/methods/index.d.ts +4 -3
- package/dist/npm/src/models/methods/index.d.ts.map +1 -1
- package/dist/npm/src/models/methods/ledgerEntry.d.ts +10 -0
- package/dist/npm/src/models/methods/ledgerEntry.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/AMMBid.d.ts +12 -0
- package/dist/npm/src/models/transactions/AMMBid.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/AMMBid.js +56 -0
- package/dist/npm/src/models/transactions/AMMBid.js.map +1 -0
- package/dist/npm/src/models/transactions/AMMCreate.d.ts +11 -0
- package/dist/npm/src/models/transactions/AMMCreate.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/AMMCreate.js +32 -0
- package/dist/npm/src/models/transactions/AMMCreate.js.map +1 -0
- package/dist/npm/src/models/transactions/AMMDelete.d.ts +9 -0
- package/dist/npm/src/models/transactions/AMMDelete.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/AMMDelete.js +22 -0
- package/dist/npm/src/models/transactions/AMMDelete.js.map +1 -0
- package/dist/npm/src/models/transactions/AMMDeposit.d.ts +27 -0
- package/dist/npm/src/models/transactions/AMMDeposit.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/AMMDeposit.js +51 -0
- package/dist/npm/src/models/transactions/AMMDeposit.js.map +1 -0
- package/dist/npm/src/models/transactions/AMMVote.d.ts +10 -0
- package/dist/npm/src/models/transactions/AMMVote.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/AMMVote.js +32 -0
- package/dist/npm/src/models/transactions/AMMVote.js.map +1 -0
- package/dist/npm/src/models/transactions/AMMWithdraw.d.ts +31 -0
- package/dist/npm/src/models/transactions/AMMWithdraw.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/AMMWithdraw.js +50 -0
- package/dist/npm/src/models/transactions/AMMWithdraw.js.map +1 -0
- package/dist/npm/src/models/transactions/accountSet.d.ts +2 -1
- package/dist/npm/src/models/transactions/accountSet.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/accountSet.js +1 -0
- package/dist/npm/src/models/transactions/accountSet.js.map +1 -1
- package/dist/npm/src/models/transactions/clawback.d.ts +9 -0
- package/dist/npm/src/models/transactions/clawback.d.ts.map +1 -0
- package/dist/npm/src/models/transactions/clawback.js +19 -0
- package/dist/npm/src/models/transactions/clawback.js.map +1 -0
- package/dist/npm/src/models/transactions/common.d.ts +2 -1
- package/dist/npm/src/models/transactions/common.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/common.js +12 -1
- package/dist/npm/src/models/transactions/common.js.map +1 -1
- package/dist/npm/src/models/transactions/index.d.ts +7 -0
- package/dist/npm/src/models/transactions/index.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/index.js +5 -1
- package/dist/npm/src/models/transactions/index.js.map +1 -1
- package/dist/npm/src/models/transactions/transaction.d.ts +8 -1
- package/dist/npm/src/models/transactions/transaction.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/transaction.js +28 -0
- package/dist/npm/src/models/transactions/transaction.js.map +1 -1
- package/dist/npm/src/models/utils/flags.d.ts.map +1 -1
- package/dist/npm/src/models/utils/flags.js +17 -23
- package/dist/npm/src/models/utils/flags.js.map +1 -1
- package/dist/npm/src/models/utils/index.js +1 -1
- package/dist/npm/src/models/utils/index.js.map +1 -1
- package/dist/npm/src/sugar/autofill.d.ts.map +1 -1
- package/dist/npm/src/sugar/autofill.js +4 -3
- package/dist/npm/src/sugar/autofill.js.map +1 -1
- package/dist/npm/sugar/autofill.d.ts.map +1 -1
- package/dist/npm/sugar/autofill.js +4 -3
- package/dist/npm/sugar/autofill.js.map +1 -1
- package/package.json +8 -6
- package/src/ECDSA.ts +6 -0
- package/src/Wallet/defaultFaucets.ts +82 -0
- package/src/Wallet/fundWallet.ts +344 -0
- package/src/Wallet/index.ts +504 -0
- package/src/Wallet/rfc1751.ts +190 -0
- package/src/Wallet/rfc1751Words.json +243 -0
- package/src/Wallet/signer.ts +173 -0
- package/src/Wallet/walletFromSecretNumbers.ts +37 -0
- package/src/client/BroadcastClient.ts +84 -0
- package/src/client/ConnectionManager.ts +40 -0
- package/src/client/ExponentialBackoff.ts +71 -0
- package/src/client/RequestManager.ts +194 -0
- package/src/client/WSWrapper.ts +106 -0
- package/src/client/connection.ts +593 -0
- package/src/client/index.ts +712 -0
- package/src/client/partialPayment.ts +153 -0
- package/src/errors.ts +161 -0
- package/src/index.ts +20 -0
- package/src/models/common/index.ts +149 -0
- package/src/models/index.ts +16 -0
- package/src/models/ledger/AMM.ts +78 -0
- package/src/models/ledger/AccountRoot.ts +217 -0
- package/src/models/ledger/Amendments.ts +45 -0
- package/src/models/ledger/BaseLedgerEntry.ts +3 -0
- package/src/models/ledger/Check.ts +70 -0
- package/src/models/ledger/DepositPreauth.ts +35 -0
- package/src/models/ledger/DirectoryNode.ts +46 -0
- package/src/models/ledger/Escrow.ts +74 -0
- package/src/models/ledger/FeeSettings.ts +52 -0
- package/src/models/ledger/Ledger.ts +65 -0
- package/src/models/ledger/LedgerEntry.ts +34 -0
- package/src/models/ledger/LedgerHashes.ts +24 -0
- package/src/models/ledger/NFTokenOffer.ts +16 -0
- package/src/models/ledger/NFTokenPage.ts +20 -0
- package/src/models/ledger/NegativeUNL.ts +34 -0
- package/src/models/ledger/Offer.ts +52 -0
- package/src/models/ledger/PayChannel.ts +107 -0
- package/src/models/ledger/RippleState.ts +88 -0
- package/src/models/ledger/SignerList.ts +56 -0
- package/src/models/ledger/Ticket.ts +36 -0
- package/src/models/ledger/index.ts +58 -0
- package/src/models/methods/accountChannels.ts +93 -0
- package/src/models/methods/accountCurrencies.ts +45 -0
- package/src/models/methods/accountInfo.ts +182 -0
- package/src/models/methods/accountLines.ts +137 -0
- package/src/models/methods/accountNFTs.ts +72 -0
- package/src/models/methods/accountObjects.ts +120 -0
- package/src/models/methods/accountOffers.ts +100 -0
- package/src/models/methods/accountTx.ts +109 -0
- package/src/models/methods/ammInfo.ts +145 -0
- package/src/models/methods/baseMethod.ts +58 -0
- package/src/models/methods/bookOffers.ts +96 -0
- package/src/models/methods/channelVerify.ts +41 -0
- package/src/models/methods/depositAuthorized.ts +56 -0
- package/src/models/methods/fee.ts +91 -0
- package/src/models/methods/gatewayBalances.ts +85 -0
- package/src/models/methods/index.ts +391 -0
- package/src/models/methods/ledger.ts +125 -0
- package/src/models/methods/ledgerClosed.ts +32 -0
- package/src/models/methods/ledgerCurrent.ts +31 -0
- package/src/models/methods/ledgerData.ts +78 -0
- package/src/models/methods/ledgerEntry.ts +177 -0
- package/src/models/methods/manifest.ts +54 -0
- package/src/models/methods/nftBuyOffers.ts +37 -0
- package/src/models/methods/nftHistory.ts +113 -0
- package/src/models/methods/nftInfo.ts +25 -0
- package/src/models/methods/nftSellOffers.ts +37 -0
- package/src/models/methods/norippleCheck.ts +82 -0
- package/src/models/methods/pathFind.ts +116 -0
- package/src/models/methods/ping.ts +21 -0
- package/src/models/methods/random.ts +23 -0
- package/src/models/methods/ripplePathFind.ts +81 -0
- package/src/models/methods/serverInfo.ts +257 -0
- package/src/models/methods/serverState.ts +77 -0
- package/src/models/methods/submit.ts +94 -0
- package/src/models/methods/submitMultisigned.ts +51 -0
- package/src/models/methods/subscribe.ts +435 -0
- package/src/models/methods/transactionEntry.ts +47 -0
- package/src/models/methods/tx.ts +69 -0
- package/src/models/methods/unsubscribe.ts +49 -0
- package/src/models/transactions/AMMBid.ts +140 -0
- package/src/models/transactions/AMMCreate.ts +80 -0
- package/src/models/transactions/AMMDelete.ts +55 -0
- package/src/models/transactions/AMMDeposit.ts +130 -0
- package/src/models/transactions/AMMVote.ts +71 -0
- package/src/models/transactions/AMMWithdraw.ts +126 -0
- package/src/models/transactions/NFTokenAcceptOffer.ts +104 -0
- package/src/models/transactions/NFTokenBurn.ts +48 -0
- package/src/models/transactions/NFTokenCancelOffer.ts +45 -0
- package/src/models/transactions/NFTokenCreateOffer.ts +145 -0
- package/src/models/transactions/NFTokenMint.ts +123 -0
- package/src/models/transactions/UNLModify.ts +20 -0
- package/src/models/transactions/accountDelete.ts +50 -0
- package/src/models/transactions/accountSet.ts +228 -0
- package/src/models/transactions/checkCancel.ts +34 -0
- package/src/models/transactions/checkCash.ts +73 -0
- package/src/models/transactions/checkCreate.ts +90 -0
- package/src/models/transactions/clawback.ts +49 -0
- package/src/models/transactions/common.ts +295 -0
- package/src/models/transactions/depositPreauth.ts +68 -0
- package/src/models/transactions/enableAmendment.ts +26 -0
- package/src/models/transactions/escrowCancel.ts +45 -0
- package/src/models/transactions/escrowCreate.ts +100 -0
- package/src/models/transactions/escrowFinish.ts +63 -0
- package/src/models/transactions/index.ts +66 -0
- package/src/models/transactions/metadata.ts +69 -0
- package/src/models/transactions/offerCancel.ts +37 -0
- package/src/models/transactions/offerCreate.ts +144 -0
- package/src/models/transactions/payment.ts +278 -0
- package/src/models/transactions/paymentChannelClaim.ts +165 -0
- package/src/models/transactions/paymentChannelCreate.ts +116 -0
- package/src/models/transactions/paymentChannelFund.ts +65 -0
- package/src/models/transactions/setFee.ts +48 -0
- package/src/models/transactions/setRegularKey.ts +33 -0
- package/src/models/transactions/signerListSet.ts +89 -0
- package/src/models/transactions/ticketCreate.ts +50 -0
- package/src/models/transactions/transaction.ts +303 -0
- package/src/models/transactions/trustSet.ts +146 -0
- package/src/models/utils/flags.ts +98 -0
- package/src/models/utils/index.ts +37 -0
- package/src/sugar/autofill.ts +373 -0
- package/src/sugar/balances.ts +123 -0
- package/src/sugar/getFeeXrp.ts +45 -0
- package/src/sugar/getLedgerIndex.ts +15 -0
- package/src/sugar/getOrderbook.ts +152 -0
- package/src/sugar/index.ts +11 -0
- package/src/sugar/submit.ts +305 -0
- package/src/sugar/utils.ts +29 -0
- package/src/utils/derive.ts +23 -0
- package/src/utils/getBalanceChanges.ts +186 -0
- package/src/utils/getNFTokenID.ts +97 -0
- package/src/utils/hashes/HashPrefix.ts +40 -0
- package/src/utils/hashes/README.md +65 -0
- package/src/utils/hashes/SHAMap/InnerNode.ts +124 -0
- package/src/utils/hashes/SHAMap/LeafNode.ts +69 -0
- package/src/utils/hashes/SHAMap/index.ts +41 -0
- package/src/utils/hashes/SHAMap/node.ts +14 -0
- package/src/utils/hashes/hashLedger.ts +236 -0
- package/src/utils/hashes/index.ts +187 -0
- package/src/utils/hashes/ledgerSpaces.ts +34 -0
- package/src/utils/hashes/sha512Half.ts +19 -0
- package/src/utils/index.ts +223 -0
- package/src/utils/parseNFTokenID.ts +84 -0
- package/src/utils/quality.ts +169 -0
- package/src/utils/signPaymentChannelClaim.ts +27 -0
- package/src/utils/stringConversion.ts +27 -0
- package/src/utils/timeConversion.ts +53 -0
- package/src/utils/verifyPaymentChannelClaim.ts +30 -0
- package/src/utils/xrpConversion.ts +104 -0
@@ -0,0 +1,243 @@
|
|
1
|
+
[ "A", "ABE", "ACE", "ACT", "AD", "ADA", "ADD",
|
2
|
+
"AGO", "AID", "AIM", "AIR", "ALL", "ALP", "AM", "AMY", "AN", "ANA",
|
3
|
+
"AND", "ANN", "ANT", "ANY", "APE", "APS", "APT", "ARC", "ARE", "ARK",
|
4
|
+
"ARM", "ART", "AS", "ASH", "ASK", "AT", "ATE", "AUG", "AUK", "AVE",
|
5
|
+
"AWE", "AWK", "AWL", "AWN", "AX", "AYE", "BAD", "BAG", "BAH", "BAM",
|
6
|
+
"BAN", "BAR", "BAT", "BAY", "BE", "BED", "BEE", "BEG", "BEN", "BET",
|
7
|
+
"BEY", "BIB", "BID", "BIG", "BIN", "BIT", "BOB", "BOG", "BON", "BOO",
|
8
|
+
"BOP", "BOW", "BOY", "BUB", "BUD", "BUG", "BUM", "BUN", "BUS", "BUT",
|
9
|
+
"BUY", "BY", "BYE", "CAB", "CAL", "CAM", "CAN", "CAP", "CAR", "CAT",
|
10
|
+
"CAW", "COD", "COG", "COL", "CON", "COO", "COP", "COT", "COW", "COY",
|
11
|
+
"CRY", "CUB", "CUE", "CUP", "CUR", "CUT", "DAB", "DAD", "DAM", "DAN",
|
12
|
+
"DAR", "DAY", "DEE", "DEL", "DEN", "DES", "DEW", "DID", "DIE", "DIG",
|
13
|
+
"DIN", "DIP", "DO", "DOE", "DOG", "DON", "DOT", "DOW", "DRY", "DUB",
|
14
|
+
"DUD", "DUE", "DUG", "DUN", "EAR", "EAT", "ED", "EEL", "EGG", "EGO",
|
15
|
+
"ELI", "ELK", "ELM", "ELY", "EM", "END", "EST", "ETC", "EVA", "EVE",
|
16
|
+
"EWE", "EYE", "FAD", "FAN", "FAR", "FAT", "FAY", "FED", "FEE", "FEW",
|
17
|
+
"FIB", "FIG", "FIN", "FIR", "FIT", "FLO", "FLY", "FOE", "FOG", "FOR",
|
18
|
+
"FRY", "FUM", "FUN", "FUR", "GAB", "GAD", "GAG", "GAL", "GAM", "GAP",
|
19
|
+
"GAS", "GAY", "GEE", "GEL", "GEM", "GET", "GIG", "GIL", "GIN", "GO",
|
20
|
+
"GOT", "GUM", "GUN", "GUS", "GUT", "GUY", "GYM", "GYP", "HA", "HAD",
|
21
|
+
"HAL", "HAM", "HAN", "HAP", "HAS", "HAT", "HAW", "HAY", "HE", "HEM",
|
22
|
+
"HEN", "HER", "HEW", "HEY", "HI", "HID", "HIM", "HIP", "HIS", "HIT",
|
23
|
+
"HO", "HOB", "HOC", "HOE", "HOG", "HOP", "HOT", "HOW", "HUB", "HUE",
|
24
|
+
"HUG", "HUH", "HUM", "HUT", "I", "ICY", "IDA", "IF", "IKE", "ILL",
|
25
|
+
"INK", "INN", "IO", "ION", "IQ", "IRA", "IRE", "IRK", "IS", "IT",
|
26
|
+
"ITS", "IVY", "JAB", "JAG", "JAM", "JAN", "JAR", "JAW", "JAY", "JET",
|
27
|
+
"JIG", "JIM", "JO", "JOB", "JOE", "JOG", "JOT", "JOY", "JUG", "JUT",
|
28
|
+
"KAY", "KEG", "KEN", "KEY", "KID", "KIM", "KIN", "KIT", "LA", "LAB",
|
29
|
+
"LAC", "LAD", "LAG", "LAM", "LAP", "LAW", "LAY", "LEA", "LED", "LEE",
|
30
|
+
"LEG", "LEN", "LEO", "LET", "LEW", "LID", "LIE", "LIN", "LIP", "LIT",
|
31
|
+
"LO", "LOB", "LOG", "LOP", "LOS", "LOT", "LOU", "LOW", "LOY", "LUG",
|
32
|
+
"LYE", "MA", "MAC", "MAD", "MAE", "MAN", "MAO", "MAP", "MAT", "MAW",
|
33
|
+
"MAY", "ME", "MEG", "MEL", "MEN", "MET", "MEW", "MID", "MIN", "MIT",
|
34
|
+
"MOB", "MOD", "MOE", "MOO", "MOP", "MOS", "MOT", "MOW", "MUD", "MUG",
|
35
|
+
"MUM", "MY", "NAB", "NAG", "NAN", "NAP", "NAT", "NAY", "NE", "NED",
|
36
|
+
"NEE", "NET", "NEW", "NIB", "NIL", "NIP", "NIT", "NO", "NOB", "NOD",
|
37
|
+
"NON", "NOR", "NOT", "NOV", "NOW", "NU", "NUN", "NUT", "O", "OAF",
|
38
|
+
"OAK", "OAR", "OAT", "ODD", "ODE", "OF", "OFF", "OFT", "OH", "OIL",
|
39
|
+
"OK", "OLD", "ON", "ONE", "OR", "ORB", "ORE", "ORR", "OS", "OTT",
|
40
|
+
"OUR", "OUT", "OVA", "OW", "OWE", "OWL", "OWN", "OX", "PA", "PAD",
|
41
|
+
"PAL", "PAM", "PAN", "PAP", "PAR", "PAT", "PAW", "PAY", "PEA", "PEG",
|
42
|
+
"PEN", "PEP", "PER", "PET", "PEW", "PHI", "PI", "PIE", "PIN", "PIT",
|
43
|
+
"PLY", "PO", "POD", "POE", "POP", "POT", "POW", "PRO", "PRY", "PUB",
|
44
|
+
"PUG", "PUN", "PUP", "PUT", "QUO", "RAG", "RAM", "RAN", "RAP", "RAT",
|
45
|
+
"RAW", "RAY", "REB", "RED", "REP", "RET", "RIB", "RID", "RIG", "RIM",
|
46
|
+
"RIO", "RIP", "ROB", "ROD", "ROE", "RON", "ROT", "ROW", "ROY", "RUB",
|
47
|
+
"RUE", "RUG", "RUM", "RUN", "RYE", "SAC", "SAD", "SAG", "SAL", "SAM",
|
48
|
+
"SAN", "SAP", "SAT", "SAW", "SAY", "SEA", "SEC", "SEE", "SEN", "SET",
|
49
|
+
"SEW", "SHE", "SHY", "SIN", "SIP", "SIR", "SIS", "SIT", "SKI", "SKY",
|
50
|
+
"SLY", "SO", "SOB", "SOD", "SON", "SOP", "SOW", "SOY", "SPA", "SPY",
|
51
|
+
"SUB", "SUD", "SUE", "SUM", "SUN", "SUP", "TAB", "TAD", "TAG", "TAN",
|
52
|
+
"TAP", "TAR", "TEA", "TED", "TEE", "TEN", "THE", "THY", "TIC", "TIE",
|
53
|
+
"TIM", "TIN", "TIP", "TO", "TOE", "TOG", "TOM", "TON", "TOO", "TOP",
|
54
|
+
"TOW", "TOY", "TRY", "TUB", "TUG", "TUM", "TUN", "TWO", "UN", "UP",
|
55
|
+
"US", "USE", "VAN", "VAT", "VET", "VIE", "WAD", "WAG", "WAR", "WAS",
|
56
|
+
"WAY", "WE", "WEB", "WED", "WEE", "WET", "WHO", "WHY", "WIN", "WIT",
|
57
|
+
"WOK", "WON", "WOO", "WOW", "WRY", "WU", "YAM", "YAP", "YAW", "YE",
|
58
|
+
"YEA", "YES", "YET", "YOU", "ABED", "ABEL", "ABET", "ABLE", "ABUT",
|
59
|
+
"ACHE", "ACID", "ACME", "ACRE", "ACTA", "ACTS", "ADAM", "ADDS",
|
60
|
+
"ADEN", "AFAR", "AFRO", "AGEE", "AHEM", "AHOY", "AIDA", "AIDE",
|
61
|
+
"AIDS", "AIRY", "AJAR", "AKIN", "ALAN", "ALEC", "ALGA", "ALIA",
|
62
|
+
"ALLY", "ALMA", "ALOE", "ALSO", "ALTO", "ALUM", "ALVA", "AMEN",
|
63
|
+
"AMES", "AMID", "AMMO", "AMOK", "AMOS", "AMRA", "ANDY", "ANEW",
|
64
|
+
"ANNA", "ANNE", "ANTE", "ANTI", "AQUA", "ARAB", "ARCH", "AREA",
|
65
|
+
"ARGO", "ARID", "ARMY", "ARTS", "ARTY", "ASIA", "ASKS", "ATOM",
|
66
|
+
"AUNT", "AURA", "AUTO", "AVER", "AVID", "AVIS", "AVON", "AVOW",
|
67
|
+
"AWAY", "AWRY", "BABE", "BABY", "BACH", "BACK", "BADE", "BAIL",
|
68
|
+
"BAIT", "BAKE", "BALD", "BALE", "BALI", "BALK", "BALL", "BALM",
|
69
|
+
"BAND", "BANE", "BANG", "BANK", "BARB", "BARD", "BARE", "BARK",
|
70
|
+
"BARN", "BARR", "BASE", "BASH", "BASK", "BASS", "BATE", "BATH",
|
71
|
+
"BAWD", "BAWL", "BEAD", "BEAK", "BEAM", "BEAN", "BEAR", "BEAT",
|
72
|
+
"BEAU", "BECK", "BEEF", "BEEN", "BEER",
|
73
|
+
"BEET", "BELA", "BELL", "BELT", "BEND", "BENT", "BERG", "BERN",
|
74
|
+
"BERT", "BESS", "BEST", "BETA", "BETH", "BHOY", "BIAS", "BIDE",
|
75
|
+
"BIEN", "BILE", "BILK", "BILL", "BIND", "BING", "BIRD", "BITE",
|
76
|
+
"BITS", "BLAB", "BLAT", "BLED", "BLEW", "BLOB", "BLOC", "BLOT",
|
77
|
+
"BLOW", "BLUE", "BLUM", "BLUR", "BOAR", "BOAT", "BOCA", "BOCK",
|
78
|
+
"BODE", "BODY", "BOGY", "BOHR", "BOIL", "BOLD", "BOLO", "BOLT",
|
79
|
+
"BOMB", "BONA", "BOND", "BONE", "BONG", "BONN", "BONY", "BOOK",
|
80
|
+
"BOOM", "BOON", "BOOT", "BORE", "BORG", "BORN", "BOSE", "BOSS",
|
81
|
+
"BOTH", "BOUT", "BOWL", "BOYD", "BRAD", "BRAE", "BRAG", "BRAN",
|
82
|
+
"BRAY", "BRED", "BREW", "BRIG", "BRIM", "BROW", "BUCK", "BUDD",
|
83
|
+
"BUFF", "BULB", "BULK", "BULL", "BUNK", "BUNT", "BUOY", "BURG",
|
84
|
+
"BURL", "BURN", "BURR", "BURT", "BURY", "BUSH", "BUSS", "BUST",
|
85
|
+
"BUSY", "BYTE", "CADY", "CAFE", "CAGE", "CAIN", "CAKE", "CALF",
|
86
|
+
"CALL", "CALM", "CAME", "CANE", "CANT", "CARD", "CARE", "CARL",
|
87
|
+
"CARR", "CART", "CASE", "CASH", "CASK", "CAST", "CAVE", "CEIL",
|
88
|
+
"CELL", "CENT", "CERN", "CHAD", "CHAR", "CHAT", "CHAW", "CHEF",
|
89
|
+
"CHEN", "CHEW", "CHIC", "CHIN", "CHOU", "CHOW", "CHUB", "CHUG",
|
90
|
+
"CHUM", "CITE", "CITY", "CLAD", "CLAM", "CLAN", "CLAW", "CLAY",
|
91
|
+
"CLOD", "CLOG", "CLOT", "CLUB", "CLUE", "COAL", "COAT", "COCA",
|
92
|
+
"COCK", "COCO", "CODA", "CODE", "CODY", "COED", "COIL", "COIN",
|
93
|
+
"COKE", "COLA", "COLD", "COLT", "COMA", "COMB", "COME", "COOK",
|
94
|
+
"COOL", "COON", "COOT", "CORD", "CORE", "CORK", "CORN", "COST",
|
95
|
+
"COVE", "COWL", "CRAB", "CRAG", "CRAM", "CRAY", "CREW", "CRIB",
|
96
|
+
"CROW", "CRUD", "CUBA", "CUBE", "CUFF", "CULL", "CULT", "CUNY",
|
97
|
+
"CURB", "CURD", "CURE", "CURL", "CURT", "CUTS", "DADE", "DALE",
|
98
|
+
"DAME", "DANA", "DANE", "DANG", "DANK", "DARE", "DARK", "DARN",
|
99
|
+
"DART", "DASH", "DATA", "DATE", "DAVE", "DAVY", "DAWN", "DAYS",
|
100
|
+
"DEAD", "DEAF", "DEAL", "DEAN", "DEAR", "DEBT", "DECK", "DEED",
|
101
|
+
"DEEM", "DEER", "DEFT", "DEFY", "DELL", "DENT", "DENY", "DESK",
|
102
|
+
"DIAL", "DICE", "DIED", "DIET", "DIME", "DINE", "DING", "DINT",
|
103
|
+
"DIRE", "DIRT", "DISC", "DISH", "DISK", "DIVE", "DOCK", "DOES",
|
104
|
+
"DOLE", "DOLL", "DOLT", "DOME", "DONE", "DOOM", "DOOR", "DORA",
|
105
|
+
"DOSE", "DOTE", "DOUG", "DOUR", "DOVE", "DOWN", "DRAB", "DRAG",
|
106
|
+
"DRAM", "DRAW", "DREW", "DRUB", "DRUG", "DRUM", "DUAL", "DUCK",
|
107
|
+
"DUCT", "DUEL", "DUET", "DUKE", "DULL", "DUMB", "DUNE", "DUNK",
|
108
|
+
"DUSK", "DUST", "DUTY", "EACH", "EARL", "EARN", "EASE", "EAST",
|
109
|
+
"EASY", "EBEN", "ECHO", "EDDY", "EDEN", "EDGE", "EDGY", "EDIT",
|
110
|
+
"EDNA", "EGAN", "ELAN", "ELBA", "ELLA", "ELSE", "EMIL", "EMIT",
|
111
|
+
"EMMA", "ENDS", "ERIC", "EROS", "EVEN", "EVER", "EVIL", "EYED",
|
112
|
+
"FACE", "FACT", "FADE", "FAIL", "FAIN", "FAIR", "FAKE", "FALL",
|
113
|
+
"FAME", "FANG", "FARM", "FAST", "FATE", "FAWN", "FEAR", "FEAT",
|
114
|
+
"FEED", "FEEL", "FEET", "FELL", "FELT", "FEND", "FERN", "FEST",
|
115
|
+
"FEUD", "FIEF", "FIGS", "FILE", "FILL", "FILM", "FIND", "FINE",
|
116
|
+
"FINK", "FIRE", "FIRM", "FISH", "FISK", "FIST", "FITS", "FIVE",
|
117
|
+
"FLAG", "FLAK", "FLAM", "FLAT", "FLAW", "FLEA", "FLED", "FLEW",
|
118
|
+
"FLIT", "FLOC", "FLOG", "FLOW", "FLUB", "FLUE", "FOAL", "FOAM",
|
119
|
+
"FOGY", "FOIL", "FOLD", "FOLK", "FOND", "FONT", "FOOD", "FOOL",
|
120
|
+
"FOOT", "FORD", "FORE", "FORK", "FORM", "FORT", "FOSS", "FOUL",
|
121
|
+
"FOUR", "FOWL", "FRAU", "FRAY", "FRED", "FREE", "FRET", "FREY",
|
122
|
+
"FROG", "FROM", "FUEL", "FULL", "FUME", "FUND", "FUNK", "FURY",
|
123
|
+
"FUSE", "FUSS", "GAFF", "GAGE", "GAIL", "GAIN", "GAIT", "GALA",
|
124
|
+
"GALE", "GALL", "GALT", "GAME", "GANG", "GARB", "GARY", "GASH",
|
125
|
+
"GATE", "GAUL", "GAUR", "GAVE", "GAWK", "GEAR", "GELD", "GENE",
|
126
|
+
"GENT", "GERM", "GETS", "GIBE", "GIFT", "GILD", "GILL", "GILT",
|
127
|
+
"GINA", "GIRD", "GIRL", "GIST", "GIVE", "GLAD", "GLEE", "GLEN",
|
128
|
+
"GLIB", "GLOB", "GLOM", "GLOW", "GLUE", "GLUM", "GLUT", "GOAD",
|
129
|
+
"GOAL", "GOAT", "GOER", "GOES", "GOLD", "GOLF", "GONE", "GONG",
|
130
|
+
"GOOD", "GOOF", "GORE", "GORY", "GOSH", "GOUT", "GOWN", "GRAB",
|
131
|
+
"GRAD", "GRAY", "GREG", "GREW", "GREY", "GRID", "GRIM", "GRIN",
|
132
|
+
"GRIT", "GROW", "GRUB", "GULF", "GULL", "GUNK", "GURU", "GUSH",
|
133
|
+
"GUST", "GWEN", "GWYN", "HAAG", "HAAS", "HACK", "HAIL", "HAIR",
|
134
|
+
"HALE", "HALF", "HALL", "HALO", "HALT", "HAND", "HANG", "HANK",
|
135
|
+
"HANS", "HARD", "HARK", "HARM", "HART", "HASH", "HAST", "HATE",
|
136
|
+
"HATH", "HAUL", "HAVE", "HAWK", "HAYS", "HEAD", "HEAL", "HEAR",
|
137
|
+
"HEAT", "HEBE", "HECK", "HEED", "HEEL", "HEFT", "HELD", "HELL",
|
138
|
+
"HELM", "HERB", "HERD", "HERE", "HERO", "HERS", "HESS", "HEWN",
|
139
|
+
"HICK", "HIDE", "HIGH", "HIKE", "HILL", "HILT", "HIND", "HINT",
|
140
|
+
"HIRE", "HISS", "HIVE", "HOBO", "HOCK", "HOFF", "HOLD", "HOLE",
|
141
|
+
"HOLM", "HOLT", "HOME", "HONE", "HONK", "HOOD", "HOOF", "HOOK",
|
142
|
+
"HOOT", "HORN", "HOSE", "HOST", "HOUR", "HOVE", "HOWE", "HOWL",
|
143
|
+
"HOYT", "HUCK", "HUED", "HUFF", "HUGE", "HUGH", "HUGO", "HULK",
|
144
|
+
"HULL", "HUNK", "HUNT", "HURD", "HURL", "HURT", "HUSH", "HYDE",
|
145
|
+
"HYMN", "IBIS", "ICON", "IDEA", "IDLE", "IFFY", "INCA", "INCH",
|
146
|
+
"INTO", "IONS", "IOTA", "IOWA", "IRIS", "IRMA", "IRON", "ISLE",
|
147
|
+
"ITCH", "ITEM", "IVAN", "JACK", "JADE", "JAIL", "JAKE", "JANE",
|
148
|
+
"JAVA", "JEAN", "JEFF", "JERK", "JESS", "JEST", "JIBE", "JILL",
|
149
|
+
"JILT", "JIVE", "JOAN", "JOBS", "JOCK", "JOEL", "JOEY", "JOHN",
|
150
|
+
"JOIN", "JOKE", "JOLT", "JOVE", "JUDD", "JUDE", "JUDO", "JUDY",
|
151
|
+
"JUJU", "JUKE", "JULY", "JUNE", "JUNK", "JUNO", "JURY", "JUST",
|
152
|
+
"JUTE", "KAHN", "KALE", "KANE", "KANT", "KARL", "KATE", "KEEL",
|
153
|
+
"KEEN", "KENO", "KENT", "KERN", "KERR", "KEYS", "KICK", "KILL",
|
154
|
+
"KIND", "KING", "KIRK", "KISS", "KITE", "KLAN", "KNEE", "KNEW",
|
155
|
+
"KNIT", "KNOB", "KNOT", "KNOW", "KOCH", "KONG", "KUDO", "KURD",
|
156
|
+
"KURT", "KYLE", "LACE", "LACK", "LACY", "LADY", "LAID", "LAIN",
|
157
|
+
"LAIR", "LAKE", "LAMB", "LAME", "LAND", "LANE", "LANG", "LARD",
|
158
|
+
"LARK", "LASS", "LAST", "LATE", "LAUD", "LAVA", "LAWN", "LAWS",
|
159
|
+
"LAYS", "LEAD", "LEAF", "LEAK", "LEAN", "LEAR", "LEEK", "LEER",
|
160
|
+
"LEFT", "LEND", "LENS", "LENT", "LEON", "LESK", "LESS", "LEST",
|
161
|
+
"LETS", "LIAR", "LICE", "LICK", "LIED", "LIEN", "LIES", "LIEU",
|
162
|
+
"LIFE", "LIFT", "LIKE", "LILA", "LILT", "LILY", "LIMA", "LIMB",
|
163
|
+
"LIME", "LIND", "LINE", "LINK", "LINT", "LION", "LISA", "LIST",
|
164
|
+
"LIVE", "LOAD", "LOAF", "LOAM", "LOAN", "LOCK", "LOFT", "LOGE",
|
165
|
+
"LOIS", "LOLA", "LONE", "LONG", "LOOK", "LOON", "LOOT", "LORD",
|
166
|
+
"LORE", "LOSE", "LOSS", "LOST", "LOUD", "LOVE", "LOWE", "LUCK",
|
167
|
+
"LUCY", "LUGE", "LUKE", "LULU", "LUND", "LUNG", "LURA", "LURE",
|
168
|
+
"LURK", "LUSH", "LUST", "LYLE", "LYNN", "LYON", "LYRA", "MACE",
|
169
|
+
"MADE", "MAGI", "MAID", "MAIL", "MAIN", "MAKE", "MALE", "MALI",
|
170
|
+
"MALL", "MALT", "MANA", "MANN", "MANY", "MARC", "MARE", "MARK",
|
171
|
+
"MARS", "MART", "MARY", "MASH", "MASK", "MASS", "MAST", "MATE",
|
172
|
+
"MATH", "MAUL", "MAYO", "MEAD", "MEAL", "MEAN", "MEAT", "MEEK",
|
173
|
+
"MEET", "MELD", "MELT", "MEMO", "MEND", "MENU", "MERT", "MESH",
|
174
|
+
"MESS", "MICE", "MIKE", "MILD", "MILE", "MILK", "MILL", "MILT",
|
175
|
+
"MIMI", "MIND", "MINE", "MINI", "MINK", "MINT", "MIRE", "MISS",
|
176
|
+
"MIST", "MITE", "MITT", "MOAN", "MOAT", "MOCK", "MODE", "MOLD",
|
177
|
+
"MOLE", "MOLL", "MOLT", "MONA", "MONK", "MONT", "MOOD", "MOON",
|
178
|
+
"MOOR", "MOOT", "MORE", "MORN", "MORT", "MOSS", "MOST", "MOTH",
|
179
|
+
"MOVE", "MUCH", "MUCK", "MUDD", "MUFF", "MULE", "MULL", "MURK",
|
180
|
+
"MUSH", "MUST", "MUTE", "MUTT", "MYRA", "MYTH", "NAGY", "NAIL",
|
181
|
+
"NAIR", "NAME", "NARY", "NASH", "NAVE", "NAVY", "NEAL", "NEAR",
|
182
|
+
"NEAT", "NECK", "NEED", "NEIL", "NELL", "NEON", "NERO", "NESS",
|
183
|
+
"NEST", "NEWS", "NEWT", "NIBS", "NICE", "NICK", "NILE", "NINA",
|
184
|
+
"NINE", "NOAH", "NODE", "NOEL", "NOLL", "NONE", "NOOK", "NOON",
|
185
|
+
"NORM", "NOSE", "NOTE", "NOUN", "NOVA", "NUDE", "NULL", "NUMB",
|
186
|
+
"OATH", "OBEY", "OBOE", "ODIN", "OHIO", "OILY", "OINT", "OKAY",
|
187
|
+
"OLAF", "OLDY", "OLGA", "OLIN", "OMAN", "OMEN", "OMIT", "ONCE",
|
188
|
+
"ONES", "ONLY", "ONTO", "ONUS", "ORAL", "ORGY", "OSLO", "OTIS",
|
189
|
+
"OTTO", "OUCH", "OUST", "OUTS", "OVAL", "OVEN", "OVER", "OWLY",
|
190
|
+
"OWNS", "QUAD", "QUIT", "QUOD", "RACE", "RACK", "RACY", "RAFT",
|
191
|
+
"RAGE", "RAID", "RAIL", "RAIN", "RAKE", "RANK", "RANT", "RARE",
|
192
|
+
"RASH", "RATE", "RAVE", "RAYS", "READ", "REAL", "REAM", "REAR",
|
193
|
+
"RECK", "REED", "REEF", "REEK", "REEL", "REID", "REIN", "RENA",
|
194
|
+
"REND", "RENT", "REST", "RICE", "RICH", "RICK", "RIDE", "RIFT",
|
195
|
+
"RILL", "RIME", "RING", "RINK", "RISE", "RISK", "RITE", "ROAD",
|
196
|
+
"ROAM", "ROAR", "ROBE", "ROCK", "RODE", "ROIL", "ROLL", "ROME",
|
197
|
+
"ROOD", "ROOF", "ROOK", "ROOM", "ROOT", "ROSA", "ROSE", "ROSS",
|
198
|
+
"ROSY", "ROTH", "ROUT", "ROVE", "ROWE", "ROWS", "RUBE", "RUBY",
|
199
|
+
"RUDE", "RUDY", "RUIN", "RULE", "RUNG", "RUNS", "RUNT", "RUSE",
|
200
|
+
"RUSH", "RUSK", "RUSS", "RUST", "RUTH", "SACK", "SAFE", "SAGE",
|
201
|
+
"SAID", "SAIL", "SALE", "SALK", "SALT", "SAME", "SAND", "SANE",
|
202
|
+
"SANG", "SANK", "SARA", "SAUL", "SAVE", "SAYS", "SCAN", "SCAR",
|
203
|
+
"SCAT", "SCOT", "SEAL", "SEAM", "SEAR", "SEAT", "SEED", "SEEK",
|
204
|
+
"SEEM", "SEEN", "SEES", "SELF", "SELL", "SEND", "SENT", "SETS",
|
205
|
+
"SEWN", "SHAG", "SHAM", "SHAW", "SHAY", "SHED", "SHIM", "SHIN",
|
206
|
+
"SHOD", "SHOE", "SHOT", "SHOW", "SHUN", "SHUT", "SICK", "SIDE",
|
207
|
+
"SIFT", "SIGH", "SIGN", "SILK", "SILL", "SILO", "SILT", "SINE",
|
208
|
+
"SING", "SINK", "SIRE", "SITE", "SITS", "SITU", "SKAT", "SKEW",
|
209
|
+
"SKID", "SKIM", "SKIN", "SKIT", "SLAB", "SLAM", "SLAT", "SLAY",
|
210
|
+
"SLED", "SLEW", "SLID", "SLIM", "SLIT", "SLOB", "SLOG", "SLOT",
|
211
|
+
"SLOW", "SLUG", "SLUM", "SLUR", "SMOG", "SMUG", "SNAG", "SNOB",
|
212
|
+
"SNOW", "SNUB", "SNUG", "SOAK", "SOAR", "SOCK", "SODA", "SOFA",
|
213
|
+
"SOFT", "SOIL", "SOLD", "SOME", "SONG", "SOON", "SOOT", "SORE",
|
214
|
+
"SORT", "SOUL", "SOUR", "SOWN", "STAB", "STAG", "STAN", "STAR",
|
215
|
+
"STAY", "STEM", "STEW", "STIR", "STOW", "STUB", "STUN", "SUCH",
|
216
|
+
"SUDS", "SUIT", "SULK", "SUMS", "SUNG", "SUNK", "SURE", "SURF",
|
217
|
+
"SWAB", "SWAG", "SWAM", "SWAN", "SWAT", "SWAY", "SWIM", "SWUM",
|
218
|
+
"TACK", "TACT", "TAIL", "TAKE", "TALE", "TALK", "TALL", "TANK",
|
219
|
+
"TASK", "TATE", "TAUT", "TEAL", "TEAM", "TEAR", "TECH", "TEEM",
|
220
|
+
"TEEN", "TEET", "TELL", "TEND", "TENT", "TERM", "TERN", "TESS",
|
221
|
+
"TEST", "THAN", "THAT", "THEE", "THEM", "THEN", "THEY", "THIN",
|
222
|
+
"THIS", "THUD", "THUG", "TICK", "TIDE", "TIDY", "TIED", "TIER",
|
223
|
+
"TILE", "TILL", "TILT", "TIME", "TINA", "TINE", "TINT", "TINY",
|
224
|
+
"TIRE", "TOAD", "TOGO", "TOIL", "TOLD", "TOLL", "TONE", "TONG",
|
225
|
+
"TONY", "TOOK", "TOOL", "TOOT", "TORE", "TORN", "TOTE", "TOUR",
|
226
|
+
"TOUT", "TOWN", "TRAG", "TRAM", "TRAY", "TREE", "TREK", "TRIG",
|
227
|
+
"TRIM", "TRIO", "TROD", "TROT", "TROY", "TRUE", "TUBA", "TUBE",
|
228
|
+
"TUCK", "TUFT", "TUNA", "TUNE", "TUNG", "TURF", "TURN", "TUSK",
|
229
|
+
"TWIG", "TWIN", "TWIT", "ULAN", "UNIT", "URGE", "USED", "USER",
|
230
|
+
"USES", "UTAH", "VAIL", "VAIN", "VALE", "VARY", "VASE", "VAST",
|
231
|
+
"VEAL", "VEDA", "VEIL", "VEIN", "VEND", "VENT", "VERB", "VERY",
|
232
|
+
"VETO", "VICE", "VIEW", "VINE", "VISE", "VOID", "VOLT", "VOTE",
|
233
|
+
"WACK", "WADE", "WAGE", "WAIL", "WAIT", "WAKE", "WALE", "WALK",
|
234
|
+
"WALL", "WALT", "WAND", "WANE", "WANG", "WANT", "WARD", "WARM",
|
235
|
+
"WARN", "WART", "WASH", "WAST", "WATS", "WATT", "WAVE", "WAVY",
|
236
|
+
"WAYS", "WEAK", "WEAL", "WEAN", "WEAR", "WEED", "WEEK", "WEIR",
|
237
|
+
"WELD", "WELL", "WELT", "WENT", "WERE", "WERT", "WEST", "WHAM",
|
238
|
+
"WHAT", "WHEE", "WHEN", "WHET", "WHOA", "WHOM", "WICK", "WIFE",
|
239
|
+
"WILD", "WILL", "WIND", "WINE", "WING", "WINK", "WINO", "WIRE",
|
240
|
+
"WISE", "WISH", "WITH", "WOLF", "WONT", "WOOD", "WOOL", "WORD",
|
241
|
+
"WORE", "WORK", "WORM", "WORN", "WOVE", "WRIT", "WYNN", "YALE",
|
242
|
+
"YANG", "YANK", "YARD", "YARN", "YAWL", "YAWN", "YEAH", "YEAR",
|
243
|
+
"YELL", "YOGA", "YOKE" ]
|
@@ -0,0 +1,173 @@
|
|
1
|
+
import { BigNumber } from 'bignumber.js'
|
2
|
+
import { flatMap } from 'lodash'
|
3
|
+
import { decodeAccountID } from 'ripple-address-codec'
|
4
|
+
import {
|
5
|
+
decode,
|
6
|
+
encode,
|
7
|
+
encodeForSigning,
|
8
|
+
encodeForSigningClaim,
|
9
|
+
} from 'ripple-binary-codec'
|
10
|
+
import { sign as signWithKeypair, verify } from 'ripple-keypairs'
|
11
|
+
|
12
|
+
import { ValidationError } from '../errors'
|
13
|
+
import { Signer } from '../models/common'
|
14
|
+
import { Transaction, validate } from '../models/transactions'
|
15
|
+
|
16
|
+
import { Wallet } from '.'
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Takes several transactions with Signer fields (in object or blob form) and creates a
|
20
|
+
* single transaction with all Signers that then gets signed and returned.
|
21
|
+
*
|
22
|
+
* @param transactions - An array of signed Transactions (in object or blob form) to combine into a single signed Transaction.
|
23
|
+
* @returns A single signed Transaction which has all Signers from transactions within it.
|
24
|
+
* @throws ValidationError if:
|
25
|
+
* - There were no transactions given to sign
|
26
|
+
* - The SigningPubKey field is not the empty string in any given transaction
|
27
|
+
* - Any transaction is missing a Signers field.
|
28
|
+
* @category Signing
|
29
|
+
*/
|
30
|
+
function multisign(transactions: Array<Transaction | string>): string {
|
31
|
+
if (transactions.length === 0) {
|
32
|
+
throw new ValidationError('There were 0 transactions to multisign')
|
33
|
+
}
|
34
|
+
|
35
|
+
const decodedTransactions: Transaction[] = transactions.map(
|
36
|
+
(txOrBlob: string | Transaction) => {
|
37
|
+
return getDecodedTransaction(txOrBlob)
|
38
|
+
},
|
39
|
+
)
|
40
|
+
|
41
|
+
decodedTransactions.forEach((tx) => {
|
42
|
+
/*
|
43
|
+
* This will throw a more clear error for JS users if any of the supplied transactions has incorrect formatting
|
44
|
+
*/
|
45
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type
|
46
|
+
validate(tx as unknown as Record<string, unknown>)
|
47
|
+
if (tx.Signers == null || tx.Signers.length === 0) {
|
48
|
+
throw new ValidationError(
|
49
|
+
"For multisigning all transactions must include a Signers field containing an array of signatures. You may have forgotten to pass the 'forMultisign' parameter when signing.",
|
50
|
+
)
|
51
|
+
}
|
52
|
+
|
53
|
+
if (tx.SigningPubKey !== '') {
|
54
|
+
throw new ValidationError(
|
55
|
+
'SigningPubKey must be an empty string for all transactions when multisigning.',
|
56
|
+
)
|
57
|
+
}
|
58
|
+
})
|
59
|
+
|
60
|
+
validateTransactionEquivalence(decodedTransactions)
|
61
|
+
|
62
|
+
return encode(getTransactionWithAllSigners(decodedTransactions))
|
63
|
+
}
|
64
|
+
|
65
|
+
/**
|
66
|
+
* Creates a signature that can be used to redeem a specific amount of XRP from a payment channel.
|
67
|
+
*
|
68
|
+
* @param wallet - The account that will sign for this payment channel.
|
69
|
+
* @param channelId - An id for the payment channel to redeem XRP from.
|
70
|
+
* @param amount - The amount in drops to redeem.
|
71
|
+
* @returns A signature that can be used to redeem a specific amount of XRP from a payment channel.
|
72
|
+
* @category Utilities
|
73
|
+
*/
|
74
|
+
function authorizeChannel(
|
75
|
+
wallet: Wallet,
|
76
|
+
channelId: string,
|
77
|
+
amount: string,
|
78
|
+
): string {
|
79
|
+
const signingData = encodeForSigningClaim({
|
80
|
+
channel: channelId,
|
81
|
+
amount,
|
82
|
+
})
|
83
|
+
|
84
|
+
return signWithKeypair(signingData, wallet.privateKey)
|
85
|
+
}
|
86
|
+
|
87
|
+
/**
|
88
|
+
* Verifies that the given transaction has a valid signature based on public-key encryption.
|
89
|
+
*
|
90
|
+
* @param tx - A transaction to verify the signature of. (Can be in object or encoded string format).
|
91
|
+
* @returns Returns true if tx has a valid signature, and returns false otherwise.
|
92
|
+
* @category Utilities
|
93
|
+
*/
|
94
|
+
function verifySignature(tx: Transaction | string): boolean {
|
95
|
+
const decodedTx: Transaction = getDecodedTransaction(tx)
|
96
|
+
return verify(
|
97
|
+
encodeForSigning(decodedTx),
|
98
|
+
decodedTx.TxnSignature,
|
99
|
+
decodedTx.SigningPubKey,
|
100
|
+
)
|
101
|
+
}
|
102
|
+
|
103
|
+
/**
|
104
|
+
* The transactions should all be equal except for the 'Signers' field.
|
105
|
+
*
|
106
|
+
* @param transactions - An array of Transactions which are expected to be equal other than 'Signers'.
|
107
|
+
* @throws ValidationError if the transactions are not equal in any field other than 'Signers'.
|
108
|
+
*/
|
109
|
+
function validateTransactionEquivalence(transactions: Transaction[]): void {
|
110
|
+
const exampleTransaction = JSON.stringify({
|
111
|
+
...transactions[0],
|
112
|
+
Signers: null,
|
113
|
+
})
|
114
|
+
if (
|
115
|
+
transactions
|
116
|
+
.slice(1)
|
117
|
+
.some(
|
118
|
+
(tx) => JSON.stringify({ ...tx, Signers: null }) !== exampleTransaction,
|
119
|
+
)
|
120
|
+
) {
|
121
|
+
throw new ValidationError(
|
122
|
+
'txJSON is not the same for all signedTransactions',
|
123
|
+
)
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
function getTransactionWithAllSigners(
|
128
|
+
transactions: Transaction[],
|
129
|
+
): Transaction {
|
130
|
+
// Signers must be sorted in the combined transaction - See compareSigners' documentation for more details
|
131
|
+
const sortedSigners: Signer[] = flatMap(
|
132
|
+
transactions,
|
133
|
+
(tx) => tx.Signers ?? [],
|
134
|
+
).sort(compareSigners)
|
135
|
+
|
136
|
+
return { ...transactions[0], Signers: sortedSigners }
|
137
|
+
}
|
138
|
+
|
139
|
+
/**
|
140
|
+
* If presented in binary form, the Signers array must be sorted based on
|
141
|
+
* the numeric value of the signer addresses, with the lowest value first.
|
142
|
+
* (If submitted as JSON, the submit_multisigned method handles this automatically.)
|
143
|
+
* https://xrpl.org/multi-signing.html.
|
144
|
+
*
|
145
|
+
* @param left - A Signer to compare with.
|
146
|
+
* @param right - A second Signer to compare with.
|
147
|
+
* @returns 1 if left \> right, 0 if left = right, -1 if left \< right, and null if left or right are NaN.
|
148
|
+
*/
|
149
|
+
function compareSigners(left: Signer, right: Signer): number {
|
150
|
+
return addressToBigNumber(left.Signer.Account).comparedTo(
|
151
|
+
addressToBigNumber(right.Signer.Account),
|
152
|
+
)
|
153
|
+
}
|
154
|
+
|
155
|
+
const NUM_BITS_IN_HEX = 16
|
156
|
+
|
157
|
+
function addressToBigNumber(address: string): BigNumber {
|
158
|
+
const hex = Buffer.from(decodeAccountID(address)).toString('hex')
|
159
|
+
return new BigNumber(hex, NUM_BITS_IN_HEX)
|
160
|
+
}
|
161
|
+
|
162
|
+
function getDecodedTransaction(txOrBlob: Transaction | string): Transaction {
|
163
|
+
if (typeof txOrBlob === 'object') {
|
164
|
+
// We need this to handle X-addresses in multisigning
|
165
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We are casting here to get strong typing
|
166
|
+
return decode(encode(txOrBlob)) as unknown as Transaction
|
167
|
+
}
|
168
|
+
|
169
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We are casting here to get strong typing
|
170
|
+
return decode(txOrBlob) as unknown as Transaction
|
171
|
+
}
|
172
|
+
|
173
|
+
export { authorizeChannel, verifySignature, multisign }
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { Account } from 'xrpl-secret-numbers'
|
2
|
+
|
3
|
+
import ECDSA from '../ECDSA'
|
4
|
+
|
5
|
+
import { Wallet } from '.'
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Derives a wallet from secret numbers.
|
9
|
+
* NOTE: This uses a default encoding algorithm of secp256k1 to match the popular wallet
|
10
|
+
* [Xumm (aka Xaman)](https://xumm.app/)'s behavior.
|
11
|
+
* This may be different from the DEFAULT_ALGORITHM for other ways to generate a Wallet.
|
12
|
+
*
|
13
|
+
* @param secretNumbers - A string consisting of 8 times 6 numbers (whitespace delimited) used to derive a wallet.
|
14
|
+
* @param opts - (Optional) Options to derive a Wallet.
|
15
|
+
* @param opts.masterAddress - Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.
|
16
|
+
* @param opts.algorithm - The digital signature algorithm to generate an address for.
|
17
|
+
* @returns A Wallet derived from secret numbers.
|
18
|
+
* @throws ValidationError if unable to derive private key from secret number input.
|
19
|
+
*/
|
20
|
+
export function walletFromSecretNumbers(
|
21
|
+
secretNumbers: string[] | string,
|
22
|
+
opts?: { masterAddress?: string; algorithm?: ECDSA },
|
23
|
+
): Wallet {
|
24
|
+
const secret = new Account(secretNumbers).getFamilySeed()
|
25
|
+
const updatedOpts: { masterAddress?: string; algorithm?: ECDSA } = {
|
26
|
+
masterAddress: undefined,
|
27
|
+
algorithm: undefined,
|
28
|
+
}
|
29
|
+
// Use secp256k1 since that's the algorithm used by popular wallets like Xumm when generating secret number accounts
|
30
|
+
if (opts === undefined) {
|
31
|
+
updatedOpts.algorithm = ECDSA.secp256k1
|
32
|
+
} else {
|
33
|
+
updatedOpts.masterAddress = opts.masterAddress
|
34
|
+
updatedOpts.algorithm = opts.algorithm ?? ECDSA.secp256k1
|
35
|
+
}
|
36
|
+
return Wallet.fromSecret(secret, updatedOpts)
|
37
|
+
}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
import { Client, ClientOptions } from '.'
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Client that can rely on multiple different servers.
|
5
|
+
*
|
6
|
+
* @deprecated since version 2.2.0.
|
7
|
+
* Will be deleted in version 3.0.0.
|
8
|
+
*
|
9
|
+
* Currently this implementation does not provide better reliability.
|
10
|
+
* To get better reliability, implement reconnect/error handling logic
|
11
|
+
* and choose a reliable endpoint.
|
12
|
+
*
|
13
|
+
* If you need the ability to fall-back to different endpoints, consider
|
14
|
+
* using [xrpl-client](https://github.com/XRPL-Labs/xrpl-client/)
|
15
|
+
*
|
16
|
+
* @category Clients
|
17
|
+
*/
|
18
|
+
export class BroadcastClient extends Client {
|
19
|
+
private readonly clients: Client[]
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Creates a new BroadcastClient.
|
23
|
+
*
|
24
|
+
* @category Constructor
|
25
|
+
* @param servers - An array of names of servers.
|
26
|
+
* @param options - Options for the clients.
|
27
|
+
*/
|
28
|
+
public constructor(servers: string[], options: ClientOptions = {}) {
|
29
|
+
super(servers[0], options)
|
30
|
+
|
31
|
+
const clients: Client[] = servers.map(
|
32
|
+
(server) => new Client(server, options),
|
33
|
+
)
|
34
|
+
|
35
|
+
this.clients = clients
|
36
|
+
this.getMethodNames().forEach((name: string) => {
|
37
|
+
this[name] = async (...args): Promise<unknown> =>
|
38
|
+
/* eslint-disable @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call -- Generates types
|
39
|
+
from the Client */
|
40
|
+
Promise.race(clients.map(async (client) => client[name](...args)))
|
41
|
+
/* eslint-enable @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call */
|
42
|
+
})
|
43
|
+
|
44
|
+
// connection methods must be overridden to apply to all client instances
|
45
|
+
this.connect = async (): Promise<void> => {
|
46
|
+
await Promise.all(clients.map(async (client) => client.connect()))
|
47
|
+
}
|
48
|
+
this.disconnect = async (): Promise<void> => {
|
49
|
+
await Promise.all(clients.map(async (client) => client.disconnect()))
|
50
|
+
}
|
51
|
+
this.isConnected = (): boolean =>
|
52
|
+
clients.map((client) => client.isConnected()).every(Boolean)
|
53
|
+
|
54
|
+
clients.forEach((client) => {
|
55
|
+
client.on('error', (errorCode, errorMessage, data) =>
|
56
|
+
this.emit('error', errorCode, errorMessage, data),
|
57
|
+
)
|
58
|
+
})
|
59
|
+
}
|
60
|
+
|
61
|
+
/**
|
62
|
+
* Gets the method names of all the methods of the client.
|
63
|
+
*
|
64
|
+
* @returns A list of the names of all the methods of the client.
|
65
|
+
*/
|
66
|
+
private getMethodNames(): string[] {
|
67
|
+
const methodNames: string[] = []
|
68
|
+
const firstClient = this.clients[0]
|
69
|
+
const methods = Object.getOwnPropertyNames(firstClient)
|
70
|
+
methods.push(
|
71
|
+
...Object.getOwnPropertyNames(Object.getPrototypeOf(firstClient)),
|
72
|
+
)
|
73
|
+
for (const name of methods) {
|
74
|
+
if (
|
75
|
+
typeof firstClient[name] === 'function' &&
|
76
|
+
name !== 'constructor' &&
|
77
|
+
name !== 'on'
|
78
|
+
) {
|
79
|
+
methodNames.push(name)
|
80
|
+
}
|
81
|
+
}
|
82
|
+
return methodNames
|
83
|
+
}
|
84
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
/**
|
2
|
+
* Manage all the requests made to the websocket, and their async responses
|
3
|
+
* that come in from the WebSocket. Because they come in over the WS connection
|
4
|
+
* after-the-fact.
|
5
|
+
*/
|
6
|
+
export default class ConnectionManager {
|
7
|
+
private promisesAwaitingConnection: Array<{
|
8
|
+
resolve: (value?: void | PromiseLike<void>) => void
|
9
|
+
reject: (value?: Error) => void
|
10
|
+
}> = []
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Resolves all awaiting connections.
|
14
|
+
*/
|
15
|
+
public resolveAllAwaiting(): void {
|
16
|
+
this.promisesAwaitingConnection.map(({ resolve }) => resolve())
|
17
|
+
this.promisesAwaitingConnection = []
|
18
|
+
}
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Rejects all awaiting connections.
|
22
|
+
*
|
23
|
+
* @param error - Error to throw in the rejection.
|
24
|
+
*/
|
25
|
+
public rejectAllAwaiting(error: Error): void {
|
26
|
+
this.promisesAwaitingConnection.map(({ reject }) => reject(error))
|
27
|
+
this.promisesAwaitingConnection = []
|
28
|
+
}
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Await a new connection.
|
32
|
+
*
|
33
|
+
* @returns A promise for resolving the connection.
|
34
|
+
*/
|
35
|
+
public async awaitConnection(): Promise<void> {
|
36
|
+
return new Promise((resolve, reject) => {
|
37
|
+
this.promisesAwaitingConnection.push({ resolve, reject })
|
38
|
+
})
|
39
|
+
}
|
40
|
+
}
|