@centrifuge/sdk 1.10.0 → 1.12.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/dist/Centrifuge.d.ts +38 -0
- package/dist/Centrifuge.d.ts.map +1 -1
- package/dist/Centrifuge.js +163 -0
- package/dist/Centrifuge.js.map +1 -1
- package/dist/Centrifuge.test.js +219 -0
- package/dist/Centrifuge.test.js.map +1 -1
- package/dist/abi/MultiAdapter.abi.d.ts +1 -1
- package/dist/abi/MultiAdapter.abi.js +1 -1
- package/dist/abi/MultiAdapter.abi.js.map +1 -1
- package/dist/abi/OnchainPM.abi.d.ts +3 -0
- package/dist/abi/OnchainPM.abi.d.ts.map +1 -0
- package/dist/abi/OnchainPM.abi.js +14 -0
- package/dist/abi/OnchainPM.abi.js.map +1 -0
- package/dist/abi/OnchainPMFactory.abi.d.ts +3 -0
- package/dist/abi/OnchainPMFactory.abi.d.ts.map +1 -0
- package/dist/abi/OnchainPMFactory.abi.js +6 -0
- package/dist/abi/OnchainPMFactory.abi.js.map +1 -0
- package/dist/abi/OracleValuation.abi.d.ts +3 -0
- package/dist/abi/OracleValuation.abi.d.ts.map +1 -0
- package/dist/abi/OracleValuation.abi.js +9 -0
- package/dist/abi/OracleValuation.abi.js.map +1 -0
- package/dist/abi/ScriptHelpers.abi.d.ts +3 -0
- package/dist/abi/ScriptHelpers.abi.d.ts.map +1 -0
- package/dist/abi/ScriptHelpers.abi.js +5 -0
- package/dist/abi/ScriptHelpers.abi.js.map +1 -0
- package/dist/abi/index.d.ts +281 -0
- package/dist/abi/index.d.ts.map +1 -1
- package/dist/abi/index.js +8 -0
- package/dist/abi/index.js.map +1 -1
- package/dist/entities/OnchainPM.d.ts +203 -0
- package/dist/entities/OnchainPM.d.ts.map +1 -0
- package/dist/entities/OnchainPM.js +315 -0
- package/dist/entities/OnchainPM.js.map +1 -0
- package/dist/entities/OnchainPM.test.d.ts +2 -0
- package/dist/entities/OnchainPM.test.d.ts.map +1 -0
- package/dist/entities/OnchainPM.test.js +155 -0
- package/dist/entities/OnchainPM.test.js.map +1 -0
- package/dist/entities/Pool.d.ts +81 -3
- package/dist/entities/Pool.d.ts.map +1 -1
- package/dist/entities/Pool.js +207 -18
- package/dist/entities/Pool.js.map +1 -1
- package/dist/entities/PoolNetwork.d.ts +37 -0
- package/dist/entities/PoolNetwork.d.ts.map +1 -1
- package/dist/entities/PoolNetwork.js +136 -12
- package/dist/entities/PoolNetwork.js.map +1 -1
- package/dist/entities/PoolNetwork.test.js +134 -1
- package/dist/entities/PoolNetwork.test.js.map +1 -1
- package/dist/entities/ShareClass.d.ts.map +1 -1
- package/dist/entities/ShareClass.js +68 -74
- package/dist/entities/ShareClass.js.map +1 -1
- package/dist/entities/crosschainMessages.d.ts +127 -0
- package/dist/entities/crosschainMessages.d.ts.map +1 -0
- package/dist/entities/crosschainMessages.js +204 -0
- package/dist/entities/crosschainMessages.js.map +1 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/poolMetadata.d.ts +28 -0
- package/dist/types/poolMetadata.d.ts.map +1 -1
- package/dist/types/transaction.d.ts +5 -1
- package/dist/types/transaction.d.ts.map +1 -1
- package/dist/types/transaction.js.map +1 -1
- package/dist/types/workflow.d.ts +151 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +5 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/catalog.d.ts +29 -0
- package/dist/utils/catalog.d.ts.map +1 -0
- package/dist/utils/catalog.js +396 -0
- package/dist/utils/catalog.js.map +1 -0
- package/dist/utils/catalog.test.d.ts +2 -0
- package/dist/utils/catalog.test.d.ts.map +1 -0
- package/dist/utils/catalog.test.js +291 -0
- package/dist/utils/catalog.test.js.map +1 -0
- package/dist/utils/scriptHash.d.ts +32 -0
- package/dist/utils/scriptHash.d.ts.map +1 -0
- package/dist/utils/scriptHash.js +67 -0
- package/dist/utils/scriptHash.js.map +1 -0
- package/dist/utils/scriptHash.test.d.ts +2 -0
- package/dist/utils/scriptHash.test.d.ts.map +1 -0
- package/dist/utils/scriptHash.test.js +97 -0
- package/dist/utils/scriptHash.test.js.map +1 -0
- package/dist/utils/variables.d.ts +78 -0
- package/dist/utils/variables.d.ts.map +1 -0
- package/dist/utils/variables.js +105 -0
- package/dist/utils/variables.js.map +1 -0
- package/dist/utils/variables.test.d.ts +2 -0
- package/dist/utils/variables.test.d.ts.map +1 -0
- package/dist/utils/variables.test.js +110 -0
- package/dist/utils/variables.test.js.map +1 -0
- package/dist/utils/weiroll.d.ts +176 -0
- package/dist/utils/weiroll.d.ts.map +1 -0
- package/dist/utils/weiroll.js +341 -0
- package/dist/utils/weiroll.js.map +1 -0
- package/dist/utils/weiroll.test.d.ts +2 -0
- package/dist/utils/weiroll.test.d.ts.map +1 -0
- package/dist/utils/weiroll.test.js +430 -0
- package/dist/utils/weiroll.test.js.map +1 -0
- package/dist/utils/workflowExecute.d.ts +121 -0
- package/dist/utils/workflowExecute.d.ts.map +1 -0
- package/dist/utils/workflowExecute.js +577 -0
- package/dist/utils/workflowExecute.js.map +1 -0
- package/dist/utils/workflowExecute.test.d.ts +2 -0
- package/dist/utils/workflowExecute.test.d.ts.map +1 -0
- package/dist/utils/workflowExecute.test.js +117 -0
- package/dist/utils/workflowExecute.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -141,7 +141,11 @@ export class ShareClass extends Entity {
|
|
|
141
141
|
if (res.length === 0) {
|
|
142
142
|
return of([]);
|
|
143
143
|
}
|
|
144
|
-
const items = res.filter(
|
|
144
|
+
const items = res.filter(
|
|
145
|
+
// Skip holdings whose asset metadata isn't indexed yet (`asset` is null):
|
|
146
|
+
// they can't be priced/rendered, and reading `asset.address` below would
|
|
147
|
+
// otherwise throw and fail the whole `balances()` stream.
|
|
148
|
+
(item) => (Number(item.centrifugeId) === centrifugeId || !centrifugeId) && item.asset != null);
|
|
145
149
|
if (items.length === 0)
|
|
146
150
|
return of([]);
|
|
147
151
|
return combineLatest([
|
|
@@ -391,83 +395,73 @@ export class ShareClass extends Entity {
|
|
|
391
395
|
self._root._protocolAddresses(self.pool.centrifugeId),
|
|
392
396
|
self.pool.metadata(),
|
|
393
397
|
]);
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
abi: ABI.
|
|
417
|
-
functionName: '
|
|
418
|
-
args: [self.pool.id.raw,
|
|
419
|
-
})
|
|
420
|
-
|
|
398
|
+
const provided = (accounts ?? {});
|
|
399
|
+
const defaults = metadata?.shareClasses?.[self.id.raw]?.defaultAccounts;
|
|
400
|
+
const createAccountCalls = [];
|
|
401
|
+
const { accounting } = await self._root._protocolAddresses(self.pool.centrifugeId);
|
|
402
|
+
const client = await firstValueFrom(self._root.getClient(self.pool.centrifugeId));
|
|
403
|
+
const allocatedIds = new Set();
|
|
404
|
+
// Resolve an account id from the explicit input or the share class defaults,
|
|
405
|
+
// otherwise allocate a fresh account with the correct normal balance. By
|
|
406
|
+
// double-entry convention asset/loss/expense are debit-normal; equity/gain/
|
|
407
|
+
// liability are credit-normal. This lets a holding be created on a pool that
|
|
408
|
+
// hasn't pre-created its accounts (instead of reverting "Missing required accounts").
|
|
409
|
+
const resolveAccount = async (explicit, fallback, isDebitNormal) => {
|
|
410
|
+
const existing = explicit ?? fallback;
|
|
411
|
+
if (existing !== undefined)
|
|
412
|
+
return BigInt(existing);
|
|
413
|
+
// Generate a fresh id that doesn't already exist on-chain and isn't already
|
|
414
|
+
// allocated in this batch — `initializeHolding` reverts InvalidAccountCombination
|
|
415
|
+
// if any two of the four accounts collide.
|
|
416
|
+
let id = randomUint(256);
|
|
417
|
+
while (allocatedIds.has(id) ||
|
|
418
|
+
(await client.readContract({
|
|
419
|
+
address: accounting,
|
|
420
|
+
abi: ABI.Accounting,
|
|
421
|
+
functionName: 'exists',
|
|
422
|
+
args: [self.pool.id.raw, id],
|
|
423
|
+
}))) {
|
|
424
|
+
id = randomUint(256);
|
|
421
425
|
}
|
|
426
|
+
allocatedIds.add(id);
|
|
427
|
+
createAccountCalls.push(encodeFunctionData({
|
|
428
|
+
abi: ABI.Hub,
|
|
429
|
+
functionName: 'createAccount',
|
|
430
|
+
args: [self.pool.id.raw, id, isDebitNormal],
|
|
431
|
+
}));
|
|
432
|
+
return id;
|
|
433
|
+
};
|
|
434
|
+
let initData;
|
|
435
|
+
if (isLiability) {
|
|
436
|
+
const expenseAccount = await resolveAccount(provided[AccountType.Expense], defaults?.expense, true);
|
|
437
|
+
const liabilityAccount = await resolveAccount(provided[AccountType.Liability], defaults?.liability, false);
|
|
438
|
+
initData = encodeFunctionData({
|
|
439
|
+
abi: ABI.Hub,
|
|
440
|
+
functionName: 'initializeLiability',
|
|
441
|
+
args: [self.pool.id.raw, self.id.raw, assetId.raw, valuation, expenseAccount, liabilityAccount],
|
|
442
|
+
});
|
|
422
443
|
}
|
|
423
444
|
else {
|
|
424
|
-
const assetAccount =
|
|
425
|
-
const equityAccount =
|
|
426
|
-
const gainAccount =
|
|
427
|
-
const lossAccount =
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
gainAccount,
|
|
443
|
-
lossAccount,
|
|
444
|
-
],
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
else {
|
|
448
|
-
const newAssetAccount = await self._getFreeAccountId();
|
|
449
|
-
const createAccountData = encodeFunctionData({
|
|
450
|
-
abi: ABI.Hub,
|
|
451
|
-
functionName: 'createAccount',
|
|
452
|
-
args: [self.pool.id.raw, newAssetAccount, false],
|
|
453
|
-
});
|
|
454
|
-
const initHoldingData = encodeFunctionData({
|
|
455
|
-
abi: ABI.Hub,
|
|
456
|
-
functionName: 'initializeHolding',
|
|
457
|
-
args: [
|
|
458
|
-
self.pool.id.raw,
|
|
459
|
-
self.id.raw,
|
|
460
|
-
assetId.raw,
|
|
461
|
-
valuation,
|
|
462
|
-
newAssetAccount,
|
|
463
|
-
equityAccount,
|
|
464
|
-
gainAccount,
|
|
465
|
-
lossAccount,
|
|
466
|
-
],
|
|
467
|
-
});
|
|
468
|
-
data = [createAccountData, initHoldingData];
|
|
469
|
-
}
|
|
445
|
+
const assetAccount = await resolveAccount(provided[AccountType.Asset], defaults?.asset, true);
|
|
446
|
+
const equityAccount = await resolveAccount(provided[AccountType.Equity], defaults?.equity, false);
|
|
447
|
+
const gainAccount = await resolveAccount(provided[AccountType.Gain], defaults?.gain, false);
|
|
448
|
+
const lossAccount = await resolveAccount(provided[AccountType.Loss], defaults?.loss, true);
|
|
449
|
+
initData = encodeFunctionData({
|
|
450
|
+
abi: ABI.Hub,
|
|
451
|
+
functionName: 'initializeHolding',
|
|
452
|
+
args: [
|
|
453
|
+
self.pool.id.raw,
|
|
454
|
+
self.id.raw,
|
|
455
|
+
assetId.raw,
|
|
456
|
+
valuation,
|
|
457
|
+
assetAccount,
|
|
458
|
+
equityAccount,
|
|
459
|
+
gainAccount,
|
|
460
|
+
lossAccount,
|
|
461
|
+
],
|
|
462
|
+
});
|
|
470
463
|
}
|
|
464
|
+
const data = createAccountCalls.length > 0 ? [...createAccountCalls, initData] : initData;
|
|
471
465
|
yield* wrapTransaction('Create holding', ctx, {
|
|
472
466
|
contract: hub,
|
|
473
467
|
data,
|