@bronlabs/intents-sdk 1.0.128 → 1.0.135

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.
@@ -1,12 +1,15 @@
1
1
  import { Connection, Transaction, SystemProgram, Keypair, PublicKey } from "@solana/web3.js";
2
2
  import { createTransferInstruction, getOrCreateAssociatedTokenAccount } from "@solana/spl-token";
3
3
  import bs58 from "bs58";
4
+ import { ethers } from 'ethers';
5
+ import { SignatureScheme, verifyEd25519 } from '../attestation.js';
4
6
  import { log, memoize } from "../utils.js";
5
7
  import { proxyFetch } from '../proxy.js';
6
8
  export class SolNetwork {
7
9
  constructor(rpcUrl, confirmations = 20) {
8
- this.nativeAssetDecimals = 9; // SOL has 9 decimals
10
+ this.nativeAssetDecimals = 9;
9
11
  this.retryDelay = 5000;
12
+ this.signatureScheme = SignatureScheme.Ed25519;
10
13
  this.rpcUrl = rpcUrl;
11
14
  this.confirmations = confirmations;
12
15
  this.connection = new Connection(rpcUrl, { commitment: "confirmed" });
@@ -14,6 +17,16 @@ export class SolNetwork {
14
17
  async ping() {
15
18
  await this.connection.getSlot();
16
19
  }
20
+ addressFromPublicKey(publicKey) {
21
+ const bytes = ethers.getBytes(publicKey);
22
+ if (bytes.length !== 32) {
23
+ throw new Error(`Invalid Solana public key length: ${bytes.length} (expected 32)`);
24
+ }
25
+ return new PublicKey(Buffer.from(bytes)).toBase58();
26
+ }
27
+ verifyAttestation(publicKey, signature, preimage) {
28
+ return verifyEd25519(publicKey, signature, preimage);
29
+ }
17
30
  async getDecimals(tokenAddress) {
18
31
  if (tokenAddress === "0x0") {
19
32
  return this.nativeAssetDecimals;
@@ -33,7 +46,7 @@ export class SolNetwork {
33
46
  return result.value.data.parsed.info.decimals;
34
47
  });
35
48
  }
36
- async getTxData(txHash, tokenAddress) {
49
+ async getTxData(txHash, tokenAddress, recipientAddress) {
37
50
  const currentBlock = await proxyFetch(this.rpcUrl, {
38
51
  method: 'POST',
39
52
  body: JSON.stringify({
@@ -71,56 +84,89 @@ export class SolNetwork {
71
84
  };
72
85
  }
73
86
  log.info(`Confirmations ${txHash}: ${currentBlock - blockNumber}`);
74
- // Native token - SOL
75
- // accountKeys[0] is the fee payer (first signer) by Solana protocol
76
- const txSigner = result.transaction.message.accountKeys[0];
87
+ // `from` must be the account that actually FUNDED the transfer, not accountKeys[0] (the fee
88
+ // payer). Returning the fee payer lets an attacker fund a settlement from an address they don't
89
+ // control while signing with a throwaway fee payer that derives to the declared orderFrom —
90
+ // the oracle's senderValid would then check the wrong account.
91
+ const accountKeys = result.transaction.message.accountKeys;
92
+ const numSigners = result.transaction.message.header?.numRequiredSignatures ?? 1;
93
+ const isSigner = (i) => i < numSigners;
77
94
  if (tokenAddress === "0x0") {
78
- if (Number(result.meta.postBalances[0] - result.meta.preBalances[0]) > 0) {
95
+ const idx = accountKeys.findIndex((key) => key === recipientAddress);
96
+ if (idx === -1) {
79
97
  return {
80
- from: txSigner,
81
- to: result.transaction.message.accountKeys[0],
82
- token: tokenAddress,
83
- amount: BigInt(result.meta.postBalances[0]) - BigInt(result.meta.preBalances[0]),
98
+ from: "",
99
+ to: "",
100
+ token: "",
101
+ amount: 0n,
84
102
  confirmed
85
103
  };
86
104
  }
87
- else {
88
- return {
89
- from: txSigner,
90
- to: result.transaction.message.accountKeys[1],
91
- token: tokenAddress,
92
- amount: BigInt(result.meta.postBalances[1]) - BigInt(result.meta.preBalances[1]),
93
- confirmed
94
- };
105
+ const amount = BigInt(result.meta.postBalances[idx]) - BigInt(result.meta.preBalances[idx]);
106
+ // funder = a signing account (other than the recipient) whose lamports dropped by at least the
107
+ // credited amount. Attribution must be unambiguous: with several qualifying signers we cannot
108
+ // tell which one funded the transfer, so fail closed (empty from → senderValid fails).
109
+ const funders = [];
110
+ for (let i = 0; i < accountKeys.length; i++) {
111
+ if (i === idx || !isSigner(i)) {
112
+ continue;
113
+ }
114
+ const decrease = BigInt(result.meta.preBalances[i]) - BigInt(result.meta.postBalances[i]);
115
+ if (decrease >= amount) {
116
+ funders.push(accountKeys[i]);
117
+ }
95
118
  }
119
+ const from = funders.length === 1 ? funders[0] : "";
120
+ return {
121
+ from,
122
+ to: accountKeys[idx],
123
+ token: tokenAddress,
124
+ amount,
125
+ confirmed
126
+ };
96
127
  }
97
128
  // ERC20 token
98
129
  const postTokenBalances = result.meta.postTokenBalances.filter((balance) => balance.mint === tokenAddress);
99
130
  const preTokenBalances = result.meta.preTokenBalances.filter((balance) => balance.mint === tokenAddress);
100
131
  const senderAddress = (() => {
101
- // Find the account that has less tokens in postTokenBalances than in preTokenBalances
102
132
  for (const postBalance of postTokenBalances) {
103
133
  const preBalance = preTokenBalances.find((balance) => balance.owner === postBalance.owner);
104
134
  if (preBalance && BigInt(postBalance.uiTokenAmount.amount) < BigInt(preBalance.uiTokenAmount.amount)) {
105
135
  return preBalance.owner;
106
136
  }
107
137
  }
108
- throw new Error("No sender found");
138
+ return "";
109
139
  })();
110
- const postTokenBalanceOfReceiver = postTokenBalances.find((balance) => balance.owner != senderAddress);
111
- const preTokenBalanceOfReceiver = preTokenBalances.find((balance) => balance.owner != senderAddress);
140
+ const postTokenBalanceOfReceiver = postTokenBalances.find((balance) => balance.owner === recipientAddress);
141
+ const preTokenBalanceOfReceiver = preTokenBalances.find((balance) => balance.owner === recipientAddress);
142
+ if (!senderAddress || !postTokenBalanceOfReceiver) {
143
+ return {
144
+ from: "",
145
+ to: "",
146
+ token: "",
147
+ amount: 0n,
148
+ confirmed
149
+ };
150
+ }
112
151
  let preBalance = 0n;
113
152
  if (preTokenBalanceOfReceiver?.uiTokenAmount.amount) {
114
153
  preBalance = BigInt(preTokenBalanceOfReceiver.uiTokenAmount.amount);
115
154
  }
155
+ // `from` is the token-account owner whose balance dropped (computed above), required to be a
156
+ // signer of the tx — not accountKeys[0]. A non-signing funder means we can't bind the payment to
157
+ // the attester, so reject (empty from → senderValid fails).
158
+ const senderIsSigner = accountKeys.slice(0, numSigners).includes(senderAddress);
116
159
  return {
117
- from: txSigner,
160
+ from: senderIsSigner ? senderAddress : "",
118
161
  to: postTokenBalanceOfReceiver.owner,
119
162
  token: postTokenBalanceOfReceiver.mint,
120
163
  amount: BigInt(postTokenBalanceOfReceiver.uiTokenAmount.amount) - preBalance,
121
164
  confirmed
122
165
  };
123
166
  }
167
+ /**
168
+ * @deprecated Signs from a raw private key — do not use in production. Kept for local tooling/tests.
169
+ */
124
170
  async transfer(privateKey, to, value, tokenAddress) {
125
171
  const keypair = this.base58ToKeypair(privateKey);
126
172
  if (tokenAddress === "0x0") {
@@ -134,8 +180,7 @@ export class SolNetwork {
134
180
  return await this.connection.sendTransaction(transaction, [keypair]);
135
181
  }
136
182
  const senderTokenAccount = await getOrCreateAssociatedTokenAccount(this.connection, keypair, new PublicKey(tokenAddress), keypair.publicKey);
137
- const receiverTokenAccount = await getOrCreateAssociatedTokenAccount(this.connection, keypair, new PublicKey(tokenAddress), new PublicKey(to), true // Allow creating a token account for the receiver if it doesn't exist
138
- );
183
+ const receiverTokenAccount = await getOrCreateAssociatedTokenAccount(this.connection, keypair, new PublicKey(tokenAddress), new PublicKey(to), true);
139
184
  const transaction = new Transaction().add(createTransferInstruction(senderTokenAccount.address, receiverTokenAccount.address, keypair.publicKey, value));
140
185
  transaction.recentBlockhash = (await this.connection.getLatestBlockhash()).blockhash;
141
186
  return await this.connection.sendTransaction(transaction, [keypair]);
@@ -1 +1 @@
1
- {"version":3,"file":"sol.js","sourceRoot":"","sources":["../../src/networks/sol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sol.js","sourceRoot":"","sources":["../../src/networks/sol.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,22 @@
1
1
  import { Network, TransactionData } from "./index.js";
2
- export declare class TonNetwork implements Network {
2
+ import { AttestationCapable, SignatureScheme } from '../attestation.js';
3
+ export declare class TonNetwork implements Network, AttestationCapable {
3
4
  private readonly client;
4
5
  private readonly rpcUrl;
5
6
  private readonly confirmations;
6
7
  private readonly nativeAssetDecimals;
7
8
  readonly retryDelay: number;
9
+ readonly signatureScheme = SignatureScheme.Ed25519;
8
10
  constructor(rpcUrl: string, confirmations?: number);
11
+ addressFromPublicKey(publicKey: string): string;
12
+ verifyAttestation(publicKey: string, signature: string, preimage: Uint8Array): Promise<boolean>;
13
+ matchesAddress(publicKey: string, address: string): boolean;
9
14
  ping(): Promise<void>;
10
15
  getDecimals(tokenAddress: string): Promise<number>;
11
16
  getTxData(txHash: string, tokenAddress: string, recipientAddress: string): Promise<TransactionData | undefined>;
17
+ /**
18
+ * @deprecated Signs from a raw private key — do not use in production. Kept for local tooling/tests.
19
+ */
12
20
  transfer(privateKey: string, to: string, value: bigint, tokenAddress: string): Promise<string>;
13
21
  private parsePrivateKey;
14
22
  private parseNativeTransfer;
@@ -1,17 +1,36 @@
1
1
  import { Address, beginCell, internal, SendMode, toNano, TonClient, WalletContractV5R1 } from "@ton/ton";
2
2
  import { keyPairFromSecretKey } from "@ton/crypto";
3
+ import { ethers } from 'ethers';
4
+ import { SignatureScheme, verifyEd25519 } from '../attestation.js';
3
5
  import { log, memoize } from "../utils.js";
4
6
  import { proxyFetch } from '../proxy.js';
5
7
  export class TonNetwork {
6
8
  constructor(rpcUrl, confirmations = 20) {
7
9
  this.nativeAssetDecimals = 9;
8
10
  this.retryDelay = 5000;
11
+ this.signatureScheme = SignatureScheme.Ed25519;
9
12
  this.rpcUrl = rpcUrl;
10
13
  this.confirmations = confirmations;
11
14
  this.client = new TonClient({
12
15
  endpoint: rpcUrl
13
16
  });
14
17
  }
18
+ // A TON wallet is a contract; one public key maps to different addresses per wallet version.
19
+ // Pinned to WalletContractV5R1 (see transfer()) — settlements must come from a V5R1 wallet,
20
+ // else the derived address won't match orderFrom.
21
+ addressFromPublicKey(publicKey) {
22
+ const wallet = WalletContractV5R1.create({
23
+ workchain: 0,
24
+ publicKey: Buffer.from(ethers.getBytes(publicKey)),
25
+ });
26
+ return wallet.address.toString({ bounceable: false });
27
+ }
28
+ verifyAttestation(publicKey, signature, preimage) {
29
+ return verifyEd25519(publicKey, signature, preimage);
30
+ }
31
+ matchesAddress(publicKey, address) {
32
+ return this.addressesMatch(this.addressFromPublicKey(publicKey), address);
33
+ }
15
34
  async ping() {
16
35
  await this.request("/v3/masterchainInfo");
17
36
  }
@@ -63,6 +82,9 @@ export class TonNetwork {
63
82
  }
64
83
  return this.parseJettonTransfer(txHash, tokenAddress, recipientAddress, confirmed);
65
84
  }
85
+ /**
86
+ * @deprecated Signs from a raw private key — do not use in production. Kept for local tooling/tests.
87
+ */
66
88
  async transfer(privateKey, to, value, tokenAddress) {
67
89
  const keyPair = this.parsePrivateKey(privateKey);
68
90
  const wallet = WalletContractV5R1.create({
@@ -111,14 +133,12 @@ export class TonNetwork {
111
133
  ]
112
134
  });
113
135
  }
114
- // Wait for seqno to change (transaction confirmed)
115
136
  for (let attempt = 0; attempt < 30; attempt++) {
116
137
  await this.sleep(2000);
117
138
  const currentSeqno = await contract.getSeqno();
118
139
  if (currentSeqno > seqno)
119
140
  break;
120
141
  }
121
- // Get the latest transaction hash
122
142
  const transactions = await this.client.getTransactions(wallet.address, { limit: 1 });
123
143
  if (transactions.length === 0) {
124
144
  throw new Error("Transaction not found after confirmation");
@@ -142,7 +162,6 @@ export class TonNetwork {
142
162
  }
143
163
  parseNativeTransfer(tx, recipientAddress, confirmed) {
144
164
  const outMsgs = tx.out_msgs || [];
145
- // For outgoing messages, the sender is the account that owns this transaction
146
165
  const txAccount = this.normalizeAddress(tx.account);
147
166
  for (const msg of outMsgs) {
148
167
  if (msg.destination) {
@@ -158,7 +177,6 @@ export class TonNetwork {
158
177
  }
159
178
  }
160
179
  }
161
- // For incoming messages, the sender is the source of the in_msg
162
180
  if (tx.in_msg?.value) {
163
181
  const from = this.normalizeAddress(tx.in_msg.source);
164
182
  return {
@@ -192,7 +210,10 @@ export class TonNetwork {
192
210
  walk(trace);
193
211
  const resp = await this.request(`/v3/jetton/transfers?jetton_master=${encodeURIComponent(tokenAddress)}` +
194
212
  `&address=${encodeURIComponent(recipientAddress)}&limit=50`);
195
- const transfer = (resp.jetton_transfers ?? []).find((t) => typeof t.transaction_hash === "string" && traceTxHashes.has(t.transaction_hash));
213
+ const transfer = (resp.jetton_transfers ?? []).find((t) => typeof t.transaction_hash === "string" &&
214
+ traceTxHashes.has(t.transaction_hash) &&
215
+ t.transaction_aborted !== true &&
216
+ this.addressesMatch(this.normalizeAddress(t.destination?.address || t.destination), recipientAddress));
196
217
  if (!transfer) {
197
218
  return;
198
219
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../src/networks/ton.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../src/networks/ton.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,22 @@
1
1
  import { Network, TransactionData } from "./index.js";
2
- export declare class TrxNetwork implements Network {
2
+ import { AttestationCapable, SignatureScheme } from '../attestation.js';
3
+ export declare class TrxNetwork implements Network, AttestationCapable {
3
4
  private readonly rpcUrl;
4
5
  private readonly authHeaders;
5
6
  private readonly confirmations;
6
7
  private readonly nativeAssetDecimals;
7
8
  readonly retryDelay: number;
9
+ readonly signatureScheme = SignatureScheme.Secp256k1;
8
10
  private tronWeb;
9
11
  constructor(rpcUrl: string, confirmations?: number);
12
+ addressFromPublicKey(publicKey: string): string;
13
+ verifyAttestation(publicKey: string, signature: string, preimage: Uint8Array): boolean;
10
14
  ping(): Promise<void>;
11
15
  getDecimals(tokenAddress: string): Promise<number>;
12
- getTxData(txHash: string, tokenAddress: string): Promise<TransactionData | undefined>;
16
+ getTxData(txHash: string, tokenAddress: string, recipientAddress: string): Promise<TransactionData | undefined>;
17
+ /**
18
+ * @deprecated Signs from a raw private key — do not use in production. Kept for local tooling/tests.
19
+ */
13
20
  transfer(privateKey: string, to: string, value: bigint, tokenAddress: string): Promise<string>;
14
21
  private request;
15
22
  }
@@ -1,12 +1,17 @@
1
- import { fromHex } from "tron-format-address";
1
+ import { fromHex, toHex } from "tron-format-address";
2
2
  import { TronWeb } from "tronweb";
3
+ import { ethers } from 'ethers';
4
+ import { SignatureScheme, verifySecp256k1 } from '../attestation.js';
3
5
  import { log, memoize } from "../utils.js";
4
6
  import { proxyFetch } from '../proxy.js';
7
+ const TRC20_TRANSFER_TOPIC = "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
8
+ const addrBody = (s) => (s || "").replace(/^0x/, "").toLowerCase().slice(-40);
5
9
  export class TrxNetwork {
6
10
  constructor(rpcUrl, confirmations = 20) {
7
11
  this.authHeaders = {};
8
12
  this.nativeAssetDecimals = 6;
9
13
  this.retryDelay = 10000;
14
+ this.signatureScheme = SignatureScheme.Secp256k1;
10
15
  if (rpcUrl.includes('@')) {
11
16
  const [rpcUrlPart, apiKey] = rpcUrl.split('@', 2);
12
17
  this.rpcUrl = rpcUrlPart;
@@ -21,6 +26,12 @@ export class TrxNetwork {
21
26
  headers: this.authHeaders
22
27
  });
23
28
  }
29
+ addressFromPublicKey(publicKey) {
30
+ return fromHex('41' + ethers.computeAddress(publicKey).slice(2));
31
+ }
32
+ verifyAttestation(publicKey, signature, preimage) {
33
+ return verifySecp256k1(publicKey, signature, preimage);
34
+ }
24
35
  async ping() {
25
36
  await this.request('/wallet/getnowblock', {
26
37
  method: 'POST',
@@ -44,7 +55,7 @@ export class TrxNetwork {
44
55
  return parseInt(response.constant_result[0], 16);
45
56
  });
46
57
  }
47
- async getTxData(txHash, tokenAddress) {
58
+ async getTxData(txHash, tokenAddress, recipientAddress) {
48
59
  const currentBlock = await this.request(`/wallet/getblockbylatestnum`, {
49
60
  method: "POST",
50
61
  headers: {
@@ -53,7 +64,6 @@ export class TrxNetwork {
53
64
  },
54
65
  body: JSON.stringify({ num: 1 })
55
66
  }).then((res) => res.block[0].block_header.raw_data.number);
56
- // Native token - TRX
57
67
  if (tokenAddress === "0x0") {
58
68
  const response = await this.request(`/wallet/gettransactionbyid`, {
59
69
  method: "POST",
@@ -85,15 +95,25 @@ export class TrxNetwork {
85
95
  };
86
96
  }
87
97
  log.info(`Confirmations ${txHash}: ${currentBlock - blockNumber}`);
98
+ const contract = response.raw_data?.contract?.[0];
99
+ if (contract?.type !== "TransferContract") {
100
+ log.warn(`Transaction ${txHash} is not a native TRX transfer: ${contract?.type}`);
101
+ return {
102
+ from: "",
103
+ to: "",
104
+ token: "",
105
+ amount: 0n,
106
+ confirmed
107
+ };
108
+ }
88
109
  return {
89
- from: fromHex(response.raw_data.contract[0].parameter.value.owner_address),
90
- to: fromHex(response.raw_data.contract[0].parameter.value.to_address),
110
+ from: fromHex(contract.parameter.value.owner_address),
111
+ to: fromHex(contract.parameter.value.to_address),
91
112
  token: tokenAddress,
92
- amount: BigInt(response.raw_data.contract[0].parameter.value.amount),
113
+ amount: BigInt(contract.parameter.value.amount),
93
114
  confirmed
94
115
  };
95
116
  }
96
- // TRC20 token
97
117
  const response = await this.request(`/wallet/gettransactioninfobyid`, {
98
118
  method: "POST",
99
119
  headers: {
@@ -115,36 +135,44 @@ export class TrxNetwork {
115
135
  confirmed
116
136
  };
117
137
  }
118
- // Fetch transaction to get owner_address (sender)
119
- const txResponse = await this.request(`/wallet/gettransactionbyid`, {
120
- method: "POST",
121
- headers: {
122
- accept: "application/json",
123
- "content-type": "application/json"
124
- },
125
- body: JSON.stringify({ value: txHash })
126
- });
127
- const from = txResponse?.raw_data?.contract?.[0]?.parameter?.value?.owner_address
128
- ? fromHex(txResponse.raw_data.contract[0].parameter.value.owner_address)
129
- : "";
138
+ // TRC20 trust only a Transfer emitted by the token contract itself, to the expected
139
+ // recipient. Reading log[0] blindly lets approve() / events from other contracts satisfy
140
+ // validation with no real transfer.
141
+ const tokenBody = addrBody(toHex(tokenAddress));
142
+ const recipientBody = addrBody(toHex(recipientAddress));
143
+ const transferLog = (response.log || []).find((l) => addrBody(l.address) === tokenBody &&
144
+ (l.topics?.[0] || "").replace(/^0x/, "").toLowerCase() === TRC20_TRANSFER_TOPIC &&
145
+ l.topics?.length === 3 &&
146
+ addrBody(l.topics[2]) === recipientBody);
147
+ if (!transferLog) {
148
+ log.warn(`Transaction ${txHash} has no TRC20 Transfer of ${tokenAddress} to ${recipientAddress}`);
149
+ return {
150
+ from: "",
151
+ to: "",
152
+ token: "",
153
+ amount: 0n,
154
+ confirmed
155
+ };
156
+ }
157
+ const amountHex = (transferLog.data || "").replace(/^0x/, "");
130
158
  return {
131
- from,
132
- to: fromHex("0x" + response.log[0].topics[2].toString().slice(24)),
133
- token: fromHex(response.contract_address),
134
- amount: BigInt(parseInt(response.log[0].data, 16)),
159
+ from: fromHex("0x" + addrBody(transferLog.topics[1])),
160
+ to: fromHex("0x" + addrBody(transferLog.topics[2])),
161
+ token: fromHex("0x" + tokenBody),
162
+ amount: amountHex ? BigInt("0x" + amountHex) : 0n,
135
163
  confirmed
136
164
  };
137
165
  }
166
+ /**
167
+ * @deprecated Signs from a raw private key — do not use in production. Kept for local tooling/tests.
168
+ */
138
169
  async transfer(privateKey, to, value, tokenAddress) {
139
- // Set private key
140
170
  this.tronWeb.setPrivateKey(privateKey);
141
171
  if (tokenAddress === "0x0") {
142
- // Send TRX (native token)
143
172
  const tx = await this.tronWeb.trx.sendTransaction(to, Number(value));
144
173
  return tx.txid;
145
174
  }
146
175
  const { abi } = await this.tronWeb.trx.getContract(tokenAddress);
147
- // Send USDT or other TRC20 tokens
148
176
  const contract = this.tronWeb.contract(abi.entrys, tokenAddress);
149
177
  return await contract.methods.transfer(to, Number(value)).send();
150
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"trx.js","sourceRoot":"","sources":["../../src/networks/trx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trx.js","sourceRoot":"","sources":["../../src/networks/trx.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,21 @@
1
1
  import { Network, TransactionData } from './index.js';
2
- export declare class XrpNetwork implements Network {
2
+ import { AttestationCapable, SignatureScheme } from '../attestation.js';
3
+ export declare class XrpNetwork implements Network, AttestationCapable {
3
4
  private readonly rpcUrl;
4
5
  private readonly authHeaders;
5
6
  private readonly confirmations;
6
7
  private readonly nativeAssetDecimals;
7
8
  readonly retryDelay: number;
9
+ readonly signatureScheme = SignatureScheme.Secp256k1;
8
10
  constructor(rpcUrl: string, confirmations?: number);
11
+ addressFromPublicKey(publicKey: string): string;
12
+ verifyAttestation(publicKey: string, signature: string, preimage: Uint8Array): boolean;
9
13
  ping(): Promise<void>;
10
14
  getDecimals(tokenAddress: string): Promise<number>;
11
15
  getTxData(txHash: string, tokenAddress: string, recipientAddress: string): Promise<TransactionData | undefined>;
16
+ /**
17
+ * @deprecated Signs from a raw private key — do not use in production. Kept for local tooling/tests.
18
+ */
12
19
  transfer(privateKey: string, to: string, value: bigint, tokenAddress: string): Promise<string>;
13
20
  private parseTokenAddress;
14
21
  private getCurrentValidatedLedger;
@@ -1,5 +1,8 @@
1
1
  import Big from 'big.js';
2
2
  import { Wallet } from 'xrpl';
3
+ import { deriveAddress } from 'ripple-keypairs';
4
+ import { ethers } from 'ethers';
5
+ import { SignatureScheme, verifySecp256k1 } from '../attestation.js';
3
6
  import { log } from '../utils.js';
4
7
  import { proxyFetch } from '../proxy.js';
5
8
  const DEFAULT_ISSUED_CURRENCY_DECIMALS = 15;
@@ -8,6 +11,7 @@ export class XrpNetwork {
8
11
  this.authHeaders = {};
9
12
  this.nativeAssetDecimals = 6;
10
13
  this.retryDelay = 10000;
14
+ this.signatureScheme = SignatureScheme.Secp256k1;
11
15
  if (rpcUrl.includes('@')) {
12
16
  const [rpcUrlPart, apiKey] = rpcUrl.split('@', 2);
13
17
  this.rpcUrl = rpcUrlPart;
@@ -18,6 +22,13 @@ export class XrpNetwork {
18
22
  }
19
23
  this.confirmations = confirmations;
20
24
  }
25
+ // XRP classic address from a secp256k1 public key (compressed, uppercase hex — the XRPL form).
26
+ addressFromPublicKey(publicKey) {
27
+ return deriveAddress(ethers.SigningKey.computePublicKey(publicKey, true).slice(2).toUpperCase());
28
+ }
29
+ verifyAttestation(publicKey, signature, preimage) {
30
+ return verifySecp256k1(publicKey, signature, preimage);
31
+ }
21
32
  async ping() {
22
33
  await this.rpcCall('server_info');
23
34
  }
@@ -90,6 +101,9 @@ export class XrpNetwork {
90
101
  confirmed
91
102
  };
92
103
  }
104
+ /**
105
+ * @deprecated Signs from a raw private key — do not use in production. Kept for local tooling/tests.
106
+ */
93
107
  async transfer(privateKey, to, value, tokenAddress) {
94
108
  const wallet = Wallet.fromSeed(privateKey);
95
109
  const accountInfo = await this.rpcCall('account_info', {