@centrifuge/sdk 1.17.0 → 1.19.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.
Files changed (49) hide show
  1. package/dist/Centrifuge.d.ts +28 -1
  2. package/dist/Centrifuge.d.ts.map +1 -1
  3. package/dist/Centrifuge.js +123 -3
  4. package/dist/Centrifuge.js.map +1 -1
  5. package/dist/abi/Multicall.abi.d.ts +3 -0
  6. package/dist/abi/Multicall.abi.d.ts.map +1 -0
  7. package/dist/abi/Multicall.abi.js +6 -0
  8. package/dist/abi/Multicall.abi.js.map +1 -0
  9. package/dist/abi/index.d.ts +10 -0
  10. package/dist/abi/index.d.ts.map +1 -1
  11. package/dist/abi/index.js +2 -0
  12. package/dist/abi/index.js.map +1 -1
  13. package/dist/buildOnly.test.d.ts +2 -0
  14. package/dist/buildOnly.test.d.ts.map +1 -0
  15. package/dist/buildOnly.test.js +265 -0
  16. package/dist/buildOnly.test.js.map +1 -0
  17. package/dist/entities/Pool.d.ts.map +1 -1
  18. package/dist/entities/Pool.js +1 -0
  19. package/dist/entities/Pool.js.map +1 -1
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/tests/mocks/mockPoolMetadataV2.d.ts.map +1 -1
  25. package/dist/tests/mocks/mockPoolMetadataV2.js +59 -1
  26. package/dist/tests/mocks/mockPoolMetadataV2.js.map +1 -1
  27. package/dist/types/poolInput.d.ts +3 -1
  28. package/dist/types/poolInput.d.ts.map +1 -1
  29. package/dist/types/poolMetadata.d.ts +84 -9
  30. package/dist/types/poolMetadata.d.ts.map +1 -1
  31. package/dist/types/poolMetadata.js.map +1 -1
  32. package/dist/types/transaction.d.ts +45 -0
  33. package/dist/types/transaction.d.ts.map +1 -1
  34. package/dist/types/transaction.js.map +1 -1
  35. package/dist/utils/poolMetadataMigration.d.ts +11 -1
  36. package/dist/utils/poolMetadataMigration.d.ts.map +1 -1
  37. package/dist/utils/poolMetadataMigration.js +217 -31
  38. package/dist/utils/poolMetadataMigration.js.map +1 -1
  39. package/dist/utils/poolMetadataMigration.test.js +190 -13
  40. package/dist/utils/poolMetadataMigration.test.js.map +1 -1
  41. package/dist/utils/transaction.d.ts +11 -0
  42. package/dist/utils/transaction.d.ts.map +1 -1
  43. package/dist/utils/transaction.js +34 -14
  44. package/dist/utils/transaction.js.map +1 -1
  45. package/dist/utils/transaction.test.d.ts +2 -0
  46. package/dist/utils/transaction.test.d.ts.map +1 -0
  47. package/dist/utils/transaction.test.js +101 -0
  48. package/dist/utils/transaction.test.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,101 @@
1
+ import { expect } from 'chai';
2
+ import sinon from 'sinon';
3
+ import { encodeFunctionData, parseAbi } from 'viem';
4
+ import { sepolia } from 'viem/chains';
5
+ import { randomAddress } from '../tests/utils.js';
6
+ import { encodeBatchCalldata, wrapTransaction } from './transaction.js';
7
+ const ABI = parseAbi(['function setValue(uint256 v)', 'function multicall(bytes[] data) payable']);
8
+ describe('encodeBatchCalldata', () => {
9
+ it('throws on an empty call list', () => {
10
+ expect(() => encodeBatchCalldata([])).to.throw('No calldata to encode');
11
+ });
12
+ it('returns a single call verbatim (no multicall wrapper)', () => {
13
+ const call = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [42n] });
14
+ expect(encodeBatchCalldata([call])).to.equal(call);
15
+ });
16
+ it('wraps two or more calls in multicall(bytes[])', () => {
17
+ const call1 = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [1n] });
18
+ const call2 = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [2n] });
19
+ const expected = encodeFunctionData({ abi: ABI, functionName: 'multicall', args: [[call1, call2]] });
20
+ expect(encodeBatchCalldata([call1, call2])).to.equal(expected);
21
+ });
22
+ it('preserves call order when wrapping', () => {
23
+ const a = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [10n] });
24
+ const b = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [20n] });
25
+ const c = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [30n] });
26
+ const forward = encodeBatchCalldata([a, b, c]);
27
+ const reordered = encodeBatchCalldata([c, b, a]);
28
+ expect(forward).to.not.equal(reordered);
29
+ expect(forward).to.equal(encodeFunctionData({ abi: ABI, functionName: 'multicall', args: [[a, b, c]] }));
30
+ });
31
+ });
32
+ describe('wrapTransaction broadcast path', () => {
33
+ afterEach(() => sinon.restore());
34
+ const signingAddress = randomAddress();
35
+ const contract = randomAddress();
36
+ const txHash = '0xabc';
37
+ // Build a mock TransactionContext that drives the non-batching broadcast branch
38
+ // of wrapTransaction: a wallet client that records sendTransaction args, a
39
+ // public client whose receipt confirms success, and a root that resolves the
40
+ // chain so assertWalletChainMatches passes.
41
+ function makeCtx() {
42
+ const sendTransaction = sinon.stub().resolves(txHash);
43
+ const writeContract = sinon.stub().resolves(txHash);
44
+ const ctx = {
45
+ isBatching: false,
46
+ signingAddress,
47
+ centrifugeId: 1,
48
+ walletClient: {
49
+ getChainId: sinon.stub().resolves(sepolia.id),
50
+ sendTransaction,
51
+ writeContract,
52
+ },
53
+ publicClient: {
54
+ getCode: sinon.stub().resolves('0x'),
55
+ waitForTransactionReceipt: sinon.stub().resolves({ status: 'success' }),
56
+ },
57
+ root: {
58
+ _idToChain: sinon.stub().resolves(sepolia.id),
59
+ },
60
+ };
61
+ return { ctx, sendTransaction, writeContract };
62
+ }
63
+ async function drain(gen) {
64
+ const out = [];
65
+ for await (const v of gen)
66
+ out.push(v);
67
+ return out;
68
+ }
69
+ it('broadcasts a single call verbatim via sendTransaction (no multicall wrapper)', async () => {
70
+ const { ctx, sendTransaction, writeContract } = makeCtx();
71
+ const data = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [42n] });
72
+ const statuses = await drain(wrapTransaction('Single', ctx, { contract, data, value: 5n }));
73
+ expect(writeContract.called).to.equal(false);
74
+ expect(sendTransaction.calledOnce).to.equal(true);
75
+ expect(sendTransaction.firstCall.args[0]).to.deep.equal({ to: contract, data, value: 5n });
76
+ expect(statuses.some((s) => s.type === 'TransactionConfirmed' && s.hash === txHash)).to.equal(true);
77
+ });
78
+ it('broadcasts multiple calls as multicall(bytes[]) calldata via sendTransaction', async () => {
79
+ const { ctx, sendTransaction, writeContract } = makeCtx();
80
+ const call1 = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [1n] });
81
+ const call2 = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [2n] });
82
+ await drain(wrapTransaction('Multi', ctx, { contract, data: [call1, call2] }));
83
+ // The multicall case no longer uses writeContract — it sends pre-encoded calldata.
84
+ expect(writeContract.called).to.equal(false);
85
+ expect(sendTransaction.calledOnce).to.equal(true);
86
+ const sent = sendTransaction.firstCall.args[0];
87
+ expect(sent.to).to.equal(contract);
88
+ expect(sent.data).to.equal(encodeBatchCalldata([call1, call2]));
89
+ expect(sent.value).to.equal(0n);
90
+ });
91
+ it('yields BatchTransactionData (no broadcast) when batching', async () => {
92
+ const { ctx, sendTransaction } = makeCtx();
93
+ ctx.isBatching = true;
94
+ const data = encodeFunctionData({ abi: ABI, functionName: 'setValue', args: [7n] });
95
+ const out = await drain(wrapTransaction('Batch', ctx, { contract, data }));
96
+ expect(sendTransaction.called).to.equal(false);
97
+ expect(out).to.have.length(1);
98
+ expect(out[0]).to.deep.include({ contract, data: [data] });
99
+ });
100
+ });
101
+ //# sourceMappingURL=transaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.test.js","sourceRoot":"","sources":["../../src/utils/transaction.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@centrifuge/sdk",
3
- "version": "1.17.0",
3
+ "version": "1.19.0",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/centrifuge/sdk/tree/main#readme",
6
6
  "author": "",