@kynesyslabs/demosdk 2.12.1 → 3.1.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/abstraction/EvmCoinFinder.js +14 -2
- package/build/abstraction/EvmCoinFinder.js.map +1 -1
- package/build/abstraction/Identities.js +3 -1
- package/build/abstraction/Identities.js.map +1 -1
- package/build/bridge/nativeBridgeTypes.d.ts +4 -3
- package/build/bridge/nativeBridgeTypes.js.map +1 -1
- package/build/d402/client/types.d.ts +6 -3
- package/build/d402/server/D402Server.d.ts +25 -0
- package/build/d402/server/D402Server.js +63 -2
- package/build/d402/server/D402Server.js.map +1 -1
- package/build/d402/server/middleware.d.ts +7 -4
- package/build/d402/server/middleware.js.map +1 -1
- package/build/d402/server/types.d.ts +15 -7
- package/build/denomination/conversion.test.js +1 -1
- package/build/denomination/conversion.test.js.map +1 -1
- package/build/denomination/index.d.ts +3 -0
- package/build/denomination/index.js +6 -0
- package/build/denomination/index.js.map +1 -1
- package/build/denomination/networkInfo.d.ts +69 -0
- package/build/denomination/networkInfo.js +38 -0
- package/build/denomination/networkInfo.js.map +1 -0
- package/build/denomination/networkInfo.test.d.ts +1 -0
- package/build/denomination/networkInfo.test.js +28 -0
- package/build/denomination/networkInfo.test.js.map +1 -0
- package/build/denomination/roundTripHash.test.d.ts +1 -0
- package/build/denomination/roundTripHash.test.js +227 -0
- package/build/denomination/roundTripHash.test.js.map +1 -0
- package/build/denomination/serializerGate.d.ts +46 -0
- package/build/denomination/serializerGate.js +283 -0
- package/build/denomination/serializerGate.js.map +1 -0
- package/build/denomination/serializerGate.test.d.ts +1 -0
- package/build/denomination/serializerGate.test.js +245 -0
- package/build/denomination/serializerGate.test.js.map +1 -0
- package/build/encryption/zK/interactive/index.js +5 -1
- package/build/encryption/zK/interactive/index.js.map +1 -1
- package/build/escrow/EscrowTransaction.d.ts +36 -5
- package/build/escrow/EscrowTransaction.js +91 -10
- package/build/escrow/EscrowTransaction.js.map +1 -1
- package/build/instant_messaging/L2PSMessagingPeer.js +4 -1
- package/build/instant_messaging/L2PSMessagingPeer.js.map +1 -1
- package/build/ipfs/IPFSOperations.d.ts +37 -10
- package/build/ipfs/IPFSOperations.js +38 -8
- package/build/ipfs/IPFSOperations.js.map +1 -1
- package/build/storage/StorageProgram.d.ts +16 -8
- package/build/storage/StorageProgram.js +16 -8
- package/build/storage/StorageProgram.js.map +1 -1
- package/build/tlsnotary/TLSNotaryService.d.ts +19 -8
- package/build/tlsnotary/TLSNotaryService.js +22 -7
- package/build/tlsnotary/TLSNotaryService.js.map +1 -1
- package/build/tlsnotary/helpers.d.ts +11 -5
- package/build/tlsnotary/helpers.js +17 -5
- package/build/tlsnotary/helpers.js.map +1 -1
- package/build/types/blockchain/CustomCharges.d.ts +28 -16
- package/build/types/blockchain/CustomCharges.js +15 -5
- package/build/types/blockchain/CustomCharges.js.map +1 -1
- package/build/types/blockchain/GCREdit.d.ts +80 -3
- package/build/types/blockchain/NetworkParameters.d.ts +54 -0
- package/build/types/blockchain/NetworkParameters.js +9 -0
- package/build/types/blockchain/NetworkParameters.js.map +1 -0
- package/build/types/blockchain/Transaction.d.ts +21 -3
- package/build/types/blockchain/Transaction.js.map +1 -1
- package/build/types/blockchain/TransactionSubtypes/D402PaymentTransaction.d.ts +8 -3
- package/build/types/blockchain/TransactionSubtypes/NetworkUpgradeTransaction.d.ts +20 -0
- package/build/types/blockchain/TransactionSubtypes/NetworkUpgradeTransaction.js +2 -0
- package/build/types/blockchain/TransactionSubtypes/NetworkUpgradeTransaction.js.map +1 -0
- package/build/types/blockchain/TransactionSubtypes/NetworkUpgradeVoteTransaction.d.ts +13 -0
- package/build/types/blockchain/TransactionSubtypes/NetworkUpgradeVoteTransaction.js +2 -0
- package/build/types/blockchain/TransactionSubtypes/NetworkUpgradeVoteTransaction.js.map +1 -0
- package/build/types/blockchain/TransactionSubtypes/StorageProgramTransaction.d.ts +6 -5
- package/build/types/blockchain/TransactionSubtypes/StorageProgramTransaction.js +15 -3
- package/build/types/blockchain/TransactionSubtypes/StorageProgramTransaction.js.map +1 -1
- package/build/types/blockchain/TransactionSubtypes/ValidatorExitTransaction.d.ts +10 -0
- package/build/types/blockchain/TransactionSubtypes/ValidatorExitTransaction.js +2 -0
- package/build/types/blockchain/TransactionSubtypes/ValidatorExitTransaction.js.map +1 -0
- package/build/types/blockchain/TransactionSubtypes/ValidatorStakeTransaction.d.ts +15 -0
- package/build/types/blockchain/TransactionSubtypes/ValidatorStakeTransaction.js +2 -0
- package/build/types/blockchain/TransactionSubtypes/ValidatorStakeTransaction.js.map +1 -0
- package/build/types/blockchain/TransactionSubtypes/ValidatorUnstakeTransaction.d.ts +10 -0
- package/build/types/blockchain/TransactionSubtypes/ValidatorUnstakeTransaction.js +2 -0
- package/build/types/blockchain/TransactionSubtypes/ValidatorUnstakeTransaction.js.map +1 -0
- package/build/types/blockchain/TransactionSubtypes/index.d.ts +11 -1
- package/build/types/blockchain/TransactionSubtypes/index.js +7 -0
- package/build/types/blockchain/TransactionSubtypes/index.js.map +1 -1
- package/build/types/blockchain/TxFee.d.ts +16 -3
- package/build/types/blockchain/address.d.ts +23 -0
- package/build/types/blockchain/rawTransaction.d.ts +13 -4
- package/build/types/blockchain/statusNative.d.ts +9 -1
- package/build/types/bridge/bridgeTradePayload.d.ts +1 -1
- package/build/types/gls/StateChange.d.ts +29 -3
- package/build/types/index.d.ts +4 -2
- package/build/types/index.js.map +1 -1
- package/build/types/native/INativePayload.d.ts +6 -1
- package/build/types/validator/ValidatorTypes.d.ts +13 -0
- package/build/types/validator/ValidatorTypes.js +3 -0
- package/build/types/validator/ValidatorTypes.js.map +1 -0
- package/build/wallet/Wallet.d.ts +27 -1
- package/build/wallet/Wallet.js +30 -17
- package/build/wallet/Wallet.js.map +1 -1
- package/build/websdk/DemosTransactions.d.ts +78 -4
- package/build/websdk/DemosTransactions.js +253 -9
- package/build/websdk/DemosTransactions.js.map +1 -1
- package/build/websdk/GCRGeneration.d.ts +11 -2
- package/build/websdk/GCRGeneration.js +143 -14
- package/build/websdk/GCRGeneration.js.map +1 -1
- package/build/websdk/demosclass.d.ts +238 -26
- package/build/websdk/demosclass.js +434 -54
- package/build/websdk/demosclass.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,8 @@ import { uint8ArrayToHex } from "../encryption/unifiedCrypto.js";
|
|
|
7
7
|
import { Enigma } from "../encryption/PQC/enigma.js";
|
|
8
8
|
import { BroadcastTimeoutError } from "./BroadcastTimeoutError.js";
|
|
9
9
|
import { BroadcastFailedError } from "./BroadcastFailedError.js";
|
|
10
|
+
import { serializeTransactionContent } from "../denomination/serializerGate.js";
|
|
11
|
+
import { OS_PER_DEM } from "../denomination/index.js";
|
|
10
12
|
// Connection-error codes indicating the request never reached the node.
|
|
11
13
|
// HTTP 5xx is intentionally NOT in this set: a 5xx means the server did
|
|
12
14
|
// answer, so the broadcast may have landed even if the response was lost.
|
|
@@ -35,8 +37,16 @@ export const DemosTransactions = {
|
|
|
35
37
|
/**
|
|
36
38
|
* Create a signed DEMOS transaction to send native tokens to a given address.
|
|
37
39
|
*
|
|
40
|
+
* P4 dual-input:
|
|
41
|
+
* - `bigint`: OS amount (preferred — 1 DEM = 10^9 OS).
|
|
42
|
+
* - `number`: DEM amount (legacy, deprecated). Auto-converted to OS.
|
|
43
|
+
*
|
|
44
|
+
* Internal carrier in `tx.content.amount` is bigint OS; the
|
|
45
|
+
* serializerGate (run from `demos.sign`) emits the right wire shape
|
|
46
|
+
* per the connected node's fork status.
|
|
47
|
+
*
|
|
38
48
|
* @param to - The reciever
|
|
39
|
-
* @param amount -
|
|
49
|
+
* @param amount - DEM `number` (legacy) or OS `bigint`.
|
|
40
50
|
* @param demos - The demos instance (for getting the address nonce)
|
|
41
51
|
*
|
|
42
52
|
* @returns The signed transaction.
|
|
@@ -47,25 +57,81 @@ export const DemosTransactions = {
|
|
|
47
57
|
const { publicKey } = await demos.crypto.getIdentity("ed25519");
|
|
48
58
|
const publicKeyHex = uint8ArrayToHex(publicKey);
|
|
49
59
|
const nonce = await demos.getAddressNonce(publicKeyHex);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
if (typeof amount === "bigint" && amount < 0n) {
|
|
61
|
+
throw new Error(`[DemosTransactions.pay] amountOs must be non-negative, got ${amount}`);
|
|
62
|
+
}
|
|
63
|
+
const amountOs = typeof amount === "bigint"
|
|
64
|
+
? amount
|
|
65
|
+
: DemosTransactions._demNumberToOsBigint(amount);
|
|
66
|
+
// Sub-DEM precision guard. Demos.pay already runs this before
|
|
67
|
+
// delegating, but DemosTransactions.pay is also a public entry
|
|
68
|
+
// point (callers can import it directly). Run the same guard so
|
|
69
|
+
// every path that reaches the wire is symmetric — without this,
|
|
70
|
+
// a direct caller could submit a sub-DEM bigint to a pre-fork
|
|
71
|
+
// node and silently truncate via `wireAmount` below.
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
73
|
+
await demos._assertAmountAcceptableOnTargetNode(amountOs);
|
|
74
|
+
// Resolve the fork status now so we can emit the correct wire
|
|
75
|
+
// shape into `tx.content.data` — the node's serializer does not
|
|
76
|
+
// walk `data`, so the construction site is the source of truth
|
|
77
|
+
// for the bytes inside it. `_isPostForkCached` is private; we
|
|
78
|
+
// reach in via `any` because P4 internals haven't been promoted
|
|
79
|
+
// to the public surface.
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
const isPostFork = await demos._isPostForkCached();
|
|
82
|
+
const wireAmount = isPostFork
|
|
83
|
+
? amountOs.toString()
|
|
84
|
+
: Number(amountOs / OS_PER_DEM);
|
|
53
85
|
tx.content.to = to;
|
|
54
86
|
tx.content.nonce = nonce + 1;
|
|
55
|
-
|
|
87
|
+
// Internal carrier on `content.amount` is bigint OS — the
|
|
88
|
+
// serializerGate normalises it at hash time.
|
|
89
|
+
tx.content.amount = amountOs;
|
|
56
90
|
tx.content.type = "native";
|
|
57
91
|
tx.content.timestamp = Date.now();
|
|
58
92
|
tx.content.data = [
|
|
59
93
|
"native",
|
|
60
|
-
{
|
|
94
|
+
{
|
|
95
|
+
nativeOperation: "send",
|
|
96
|
+
// The serializer doesn't walk `data`, so emit the
|
|
97
|
+
// wire shape directly. INativeSend.args[1] was widened
|
|
98
|
+
// in commit 1 to accept OS string alongside DEM number.
|
|
99
|
+
args: [to, wireAmount],
|
|
100
|
+
},
|
|
61
101
|
];
|
|
62
102
|
return await demos.sign(tx);
|
|
63
103
|
},
|
|
104
|
+
/**
|
|
105
|
+
* Convert a legacy DEM `number` input to an OS `bigint` for internal
|
|
106
|
+
* carrying. Only whole-DEM `number` inputs are accepted on this
|
|
107
|
+
* legacy path — fractional DEM is rejected with a clear error
|
|
108
|
+
* directing callers to the bigint OS path (`denomination.demToOs`).
|
|
109
|
+
*
|
|
110
|
+
* Rationale: silently flooring (the previous behaviour) discarded up
|
|
111
|
+
* to ~10^9 OS per call without warning. The migration period
|
|
112
|
+
* tolerates legacy `number` callers, but only at exact DEM
|
|
113
|
+
* granularity — anything sub-DEM must come in as `bigint` so the
|
|
114
|
+
* caller has explicitly opted into OS arithmetic.
|
|
115
|
+
*
|
|
116
|
+
* @internal
|
|
117
|
+
*/
|
|
118
|
+
_demNumberToOsBigint(amountDem) {
|
|
119
|
+
if (!Number.isFinite(amountDem) || amountDem < 0) {
|
|
120
|
+
throw new Error(`[DemosTransactions] amount must be a non-negative finite number or bigint, got ${amountDem}`);
|
|
121
|
+
}
|
|
122
|
+
if (!Number.isInteger(amountDem)) {
|
|
123
|
+
throw new Error(`[DemosTransactions] fractional DEM not supported on the number path (got ${amountDem}); pass a bigint OS amount via denomination.demToOs("${amountDem}") instead`);
|
|
124
|
+
}
|
|
125
|
+
return BigInt(amountDem) * OS_PER_DEM;
|
|
126
|
+
},
|
|
64
127
|
/**
|
|
65
128
|
* Create a signed DEMOS transaction to send native tokens to a given address.
|
|
66
129
|
*
|
|
130
|
+
* Alias of {@link pay}. Same dual-input semantics — `bigint` OS
|
|
131
|
+
* preferred, `number` DEM accepted as the deprecated path.
|
|
132
|
+
*
|
|
67
133
|
* @param to - The reciever
|
|
68
|
-
* @param amount -
|
|
134
|
+
* @param amount - DEM `number` (legacy) or OS `bigint`.
|
|
69
135
|
* @param demos - The demos instance (for getting the address nonce)
|
|
70
136
|
*
|
|
71
137
|
* @returns The signed transaction.
|
|
@@ -99,8 +165,21 @@ export const DemosTransactions = {
|
|
|
99
165
|
// REVIEW Generate the GCREdit in the client (will be compared on the node)
|
|
100
166
|
// NOTE They are created without the tx hash, which is added in the node
|
|
101
167
|
raw_tx.content.gcr_edits = await GCRGeneration.generate(raw_tx);
|
|
102
|
-
// Hash the content of the transaction
|
|
103
|
-
|
|
168
|
+
// Hash the content of the transaction.
|
|
169
|
+
// P4 commit 2: route through the dual-format serializerGate. This
|
|
170
|
+
// deprecated signer has no `Demos` instance available so it
|
|
171
|
+
// cannot consult cached fork status — defaults to pre-fork
|
|
172
|
+
// (legacy wire). Callers that need post-fork compatibility should
|
|
173
|
+
// use `demos.sign(tx)`, which threads the cached fork status from
|
|
174
|
+
// `getNetworkInfo`.
|
|
175
|
+
const serialized = serializeTransactionContent(raw_tx.content, false);
|
|
176
|
+
raw_tx.hash = await sha256(serialized);
|
|
177
|
+
// Normalise content to the wire shape the hash committed to so
|
|
178
|
+
// downstream JSON.stringify (axios body serialisation) does not
|
|
179
|
+
// see internal bigint carriers and so the broadcast bytes match
|
|
180
|
+
// the bytes we just signed. See the equivalent block in
|
|
181
|
+
// `Demos.sign` for the full rationale (myc#13).
|
|
182
|
+
raw_tx.content = JSON.parse(serialized);
|
|
104
183
|
raw_tx.signature = await DemosTransactions.signWithAlgorithm(raw_tx.hash, keypair, { algorithm: options.algorithm });
|
|
105
184
|
return raw_tx; // Return the hashed and signed transaction
|
|
106
185
|
},
|
|
@@ -379,5 +458,170 @@ export const DemosTransactions = {
|
|
|
379
458
|
return await demos.sign(tx);
|
|
380
459
|
},
|
|
381
460
|
// NOTE Subnet transactions methods are imported and exposed in demos.ts from the l2ps.ts file.
|
|
461
|
+
// SECTION Validator staking (Phase 0 — upgradable_network track)
|
|
462
|
+
/**
|
|
463
|
+
* Create a signed `validatorStake` transaction. Used both for initial
|
|
464
|
+
* validator registration and to top up an existing stake.
|
|
465
|
+
*
|
|
466
|
+
* @param amount - Stake amount in base-unit DEMOS, encoded as a bigint string.
|
|
467
|
+
* @param connectionUrl - Validator's public endpoint (required on first stake;
|
|
468
|
+
* subsequent top-ups may overwrite it).
|
|
469
|
+
* @param demos - The demos instance (for nonce + signing).
|
|
470
|
+
*/
|
|
471
|
+
async stake(amount, connectionUrl, demos) {
|
|
472
|
+
required(demos.keypair, "Wallet not connected");
|
|
473
|
+
required(amount, "Stake amount is required");
|
|
474
|
+
if (typeof amount !== "string" || !/^\d+$/.test(amount)) {
|
|
475
|
+
throw new Error("Invalid stake amount: expected a non-negative bigint-encoded string");
|
|
476
|
+
}
|
|
477
|
+
if (BigInt(amount) <= 0n) {
|
|
478
|
+
throw new Error("Stake amount must be greater than 0");
|
|
479
|
+
}
|
|
480
|
+
required(connectionUrl, "Connection URL is required");
|
|
481
|
+
try {
|
|
482
|
+
new URL(connectionUrl);
|
|
483
|
+
}
|
|
484
|
+
catch {
|
|
485
|
+
throw new Error("Invalid connectionUrl: expected an absolute URL (e.g. https://node.example)");
|
|
486
|
+
}
|
|
487
|
+
const tx = DemosTransactions.empty();
|
|
488
|
+
const { publicKey } = await demos.crypto.getIdentity("ed25519");
|
|
489
|
+
const publicKeyHex = uint8ArrayToHex(publicKey);
|
|
490
|
+
const nonce = await demos.getAddressNonce(publicKeyHex);
|
|
491
|
+
// Staking txs are reflexive — the sender operates on their own
|
|
492
|
+
// validator record. `to` must still pass sign()'s 0x64-hex check.
|
|
493
|
+
tx.content.to = publicKeyHex;
|
|
494
|
+
tx.content.nonce = nonce + 1;
|
|
495
|
+
tx.content.amount = 0;
|
|
496
|
+
tx.content.type = "validatorStake";
|
|
497
|
+
tx.content.timestamp = Date.now();
|
|
498
|
+
tx.content.data = ["validatorStake", { amount, connectionUrl }];
|
|
499
|
+
return await demos.sign(tx);
|
|
500
|
+
},
|
|
501
|
+
/**
|
|
502
|
+
* Create a signed `validatorUnstake` transaction. Arms the unstake lock
|
|
503
|
+
* period; after `UNSTAKE_LOCK_BLOCKS` have elapsed the validator may call
|
|
504
|
+
* `validatorExit`.
|
|
505
|
+
*/
|
|
506
|
+
async unstake(demos) {
|
|
507
|
+
required(demos.keypair, "Wallet not connected");
|
|
508
|
+
const tx = DemosTransactions.empty();
|
|
509
|
+
const { publicKey } = await demos.crypto.getIdentity("ed25519");
|
|
510
|
+
const publicKeyHex = uint8ArrayToHex(publicKey);
|
|
511
|
+
const nonce = await demos.getAddressNonce(publicKeyHex);
|
|
512
|
+
tx.content.to = publicKeyHex;
|
|
513
|
+
tx.content.nonce = nonce + 1;
|
|
514
|
+
tx.content.amount = 0;
|
|
515
|
+
tx.content.type = "validatorUnstake";
|
|
516
|
+
tx.content.timestamp = Date.now();
|
|
517
|
+
tx.content.data = ["validatorUnstake", {}];
|
|
518
|
+
return await demos.sign(tx);
|
|
519
|
+
},
|
|
520
|
+
/**
|
|
521
|
+
* Create a signed `validatorExit` transaction. Only accepted by the
|
|
522
|
+
* network once `unstake_available_at <= currentBlock`.
|
|
523
|
+
*/
|
|
524
|
+
async validatorExit(demos) {
|
|
525
|
+
required(demos.keypair, "Wallet not connected");
|
|
526
|
+
const tx = DemosTransactions.empty();
|
|
527
|
+
const { publicKey } = await demos.crypto.getIdentity("ed25519");
|
|
528
|
+
const publicKeyHex = uint8ArrayToHex(publicKey);
|
|
529
|
+
const nonce = await demos.getAddressNonce(publicKeyHex);
|
|
530
|
+
tx.content.to = publicKeyHex;
|
|
531
|
+
tx.content.nonce = nonce + 1;
|
|
532
|
+
tx.content.amount = 0;
|
|
533
|
+
tx.content.type = "validatorExit";
|
|
534
|
+
tx.content.timestamp = Date.now();
|
|
535
|
+
tx.content.data = ["validatorExit", {}];
|
|
536
|
+
return await demos.sign(tx);
|
|
537
|
+
},
|
|
538
|
+
// SECTION Stackable-genesis governance (Phase 1 — upgradable_network track)
|
|
539
|
+
/**
|
|
540
|
+
* Create a signed `networkUpgrade` proposal transaction.
|
|
541
|
+
*
|
|
542
|
+
* Only active validators may propose. The node rejects proposals whose
|
|
543
|
+
* `proposedParameters` violate safety bounds (≤50% change, absolute
|
|
544
|
+
* floor/ceiling) or overlap keys with other pending/activating proposals.
|
|
545
|
+
*
|
|
546
|
+
* @param params.proposalId - UUID. Also used as lexicographic activation-order tiebreaker.
|
|
547
|
+
* @param params.proposedParameters - Subset of NetworkParameters to change.
|
|
548
|
+
* @param params.rationale - Human-readable reason, ≤1024 bytes.
|
|
549
|
+
* @param params.effectiveAtBlock - Activation block. Must be ≥ tallyBlock + grace period.
|
|
550
|
+
*/
|
|
551
|
+
async proposeNetworkUpgrade(params, demos) {
|
|
552
|
+
required(demos.keypair, "Wallet not connected");
|
|
553
|
+
const trimmedProposalId = params?.proposalId?.trim();
|
|
554
|
+
required(trimmedProposalId, "proposalId is required");
|
|
555
|
+
required(params?.rationale != null && typeof params.rationale === "string", "rationale is required (use empty string if none)");
|
|
556
|
+
if (typeof params?.effectiveAtBlock !== "number" ||
|
|
557
|
+
!Number.isInteger(params.effectiveAtBlock) ||
|
|
558
|
+
params.effectiveAtBlock < 0) {
|
|
559
|
+
throw new Error("effectiveAtBlock must be a non-negative integer block number");
|
|
560
|
+
}
|
|
561
|
+
if (!params?.proposedParameters ||
|
|
562
|
+
typeof params.proposedParameters !== "object" ||
|
|
563
|
+
Array.isArray(params.proposedParameters)) {
|
|
564
|
+
throw new Error("proposedParameters must be a non-empty plain object");
|
|
565
|
+
}
|
|
566
|
+
// Drop undefined-valued keys before counting + signing — JSON.stringify
|
|
567
|
+
// would silently strip them, so a tx with only-undefined values would
|
|
568
|
+
// sign as `{}` and get rejected at the node.
|
|
569
|
+
// Preserves Partial<NetworkParameters> typing for downstream consumers.
|
|
570
|
+
const cleanedParams = Object.fromEntries(Object.entries(params.proposedParameters)
|
|
571
|
+
.filter(([, v]) => v !== undefined));
|
|
572
|
+
if (Object.keys(cleanedParams).length === 0) {
|
|
573
|
+
throw new Error("proposedParameters must contain at least one defined value");
|
|
574
|
+
}
|
|
575
|
+
const tx = DemosTransactions.empty();
|
|
576
|
+
const { publicKey } = await demos.crypto.getIdentity("ed25519");
|
|
577
|
+
const publicKeyHex = uint8ArrayToHex(publicKey);
|
|
578
|
+
const nonce = await demos.getAddressNonce(publicKeyHex);
|
|
579
|
+
tx.content.to = publicKeyHex;
|
|
580
|
+
tx.content.nonce = nonce + 1;
|
|
581
|
+
tx.content.amount = 0;
|
|
582
|
+
tx.content.type = "networkUpgrade";
|
|
583
|
+
tx.content.timestamp = Date.now();
|
|
584
|
+
// Sign the trimmed/cleaned values — keep the wire format consistent
|
|
585
|
+
// with what the validation guards above accepted.
|
|
586
|
+
tx.content.data = [
|
|
587
|
+
"networkUpgrade",
|
|
588
|
+
{
|
|
589
|
+
proposalId: trimmedProposalId,
|
|
590
|
+
proposedParameters: cleanedParams,
|
|
591
|
+
rationale: params.rationale,
|
|
592
|
+
effectiveAtBlock: params.effectiveAtBlock,
|
|
593
|
+
},
|
|
594
|
+
];
|
|
595
|
+
return await demos.sign(tx);
|
|
596
|
+
},
|
|
597
|
+
/**
|
|
598
|
+
* Create a signed `networkUpgradeVote` transaction.
|
|
599
|
+
*
|
|
600
|
+
* The voter must be in the validator snapshot taken at the proposal's
|
|
601
|
+
* confirmation block, and may cast exactly one vote per proposal (final,
|
|
602
|
+
* non-revocable).
|
|
603
|
+
*/
|
|
604
|
+
async voteOnUpgrade(proposalId, approve, demos) {
|
|
605
|
+
required(demos.keypair, "Wallet not connected");
|
|
606
|
+
const trimmedProposalId = proposalId?.trim();
|
|
607
|
+
required(trimmedProposalId, "proposalId is required");
|
|
608
|
+
if (typeof approve !== "boolean") {
|
|
609
|
+
throw new Error("approve must be a boolean (true=yes, false=no)");
|
|
610
|
+
}
|
|
611
|
+
const tx = DemosTransactions.empty();
|
|
612
|
+
const { publicKey } = await demos.crypto.getIdentity("ed25519");
|
|
613
|
+
const publicKeyHex = uint8ArrayToHex(publicKey);
|
|
614
|
+
const nonce = await demos.getAddressNonce(publicKeyHex);
|
|
615
|
+
tx.content.to = publicKeyHex;
|
|
616
|
+
tx.content.nonce = nonce + 1;
|
|
617
|
+
tx.content.amount = 0;
|
|
618
|
+
tx.content.type = "networkUpgradeVote";
|
|
619
|
+
tx.content.timestamp = Date.now();
|
|
620
|
+
tx.content.data = [
|
|
621
|
+
"networkUpgradeVote",
|
|
622
|
+
{ proposalId: trimmedProposalId, approve },
|
|
623
|
+
];
|
|
624
|
+
return await demos.sign(tx);
|
|
625
|
+
},
|
|
382
626
|
};
|
|
383
627
|
//# sourceMappingURL=DemosTransactions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DemosTransactions.js","sourceRoot":"","sources":["../../../src/websdk/DemosTransactions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAK9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,SAAS,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,wEAAwE;AACxE,wEAAwE;AACxE,0EAA0E;AAC1E,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACpC,cAAc;IACd,WAAW;IACX,YAAY;IACZ,WAAW;CACd,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,uBAAuB;IACvB,oDAAoD;IACpD,KAAK,EAAE;QACH,OAAO,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC;IACD,4DAA4D;IAC5D,OAAO,EAAE,KAAK,WAAW,OAAY,IAAI;QACrC,sDAAsD;QACtD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAErD,mDAAmD;QACnD,+CAA+C;QAC/C,IAAI,IAAI;YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;QACpC,OAAO,MAAM,CAAA;IACjB,CAAC;IACD;;;;;;;;OAQG;IACH,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,MAAc,EAAE,KAAY;QAC9C,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;QAE/C,IAAI,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAA;QAElC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QAC/D,MAAM,YAAY,GAAG,eAAe,CAAC,SAAuB,CAAC,CAAA;QAC7D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAEvD,iDAAiD;QACjD,+BAA+B;QAC/B,yBAAyB;QAEzB,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;QAClB,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAA;QAC5B,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;QAC1B,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAA;QAC1B,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACjC,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG;YACd,QAAQ;YACR,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;SAClD,CAAA;QAED,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;IACD;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAU,EAAE,MAAc,EAAE,KAAY;QAC7C,OAAO,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACnD,CAAC;IACD,8CAA8C;IAC9C;;;;;;;;OAQG;IACH,IAAI,EAAE,KAAK,WACP,MAAmB,EACnB,OAAiB,EACjB,OAEC;QAED,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAA;QAE7C,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACjC,OAAO,GAAG;gBACN,SAAS,EAAE,SAAS;aACvB,CAAA;QACL,CAAC;QAED,uFAAuF;QACvF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACzC,CAAC;QAED,wCAAwC;QACxC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,SAAuB,CAAC,CAAA;QAEtE,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAE/D,sCAAsC;QACtC,MAAM,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC1D,MAAM,CAAC,SAAS,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CACxD,MAAM,CAAC,IAAI,EACX,OAAO,EACP,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CACnC,CAAA;QAED,OAAO,MAAM,CAAA,CAAC,2CAA2C;IAC7D,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB,EAAE,KAAK,WACpB,IAAY,EACZ,OAAiB,EACjB,OAAwC;QAKxC,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAA;QAC7C,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAA;QAEhE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;YAE7D,OAAO;gBACH,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC;aACnC,CAAA;QACL,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;QAE3B,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAc,CAAC,CAAA;YAEhE,OAAO;gBACH,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC;aACnC,CAAA;QACL,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAEzD,OAAO;gBACH,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC;aACnC,CAAA;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAClE,CAAC;IACD,8CAA8C;IAC9C;;;;;OAKG;IACH,OAAO,EAAE,KAAK,WAAW,WAAwB,EAAE,KAAY;QAC3D,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;QACxE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QAClC,6CAA6C;QAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACX,sCAAsC;gBACtC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CACjC,CAAA;QACL,CAAC;QAED,OAAO,QAAuC,CAAA;IAClD,CAAC;IACD;;;;;;;OAOG;IACH,SAAS,EAAE,KAAK,WACZ,cAA2C,EAC3C,KAAY;QAEZ,gDAAgD;QAChD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACX,wCAAwC;gBACxC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CACvC,CAAA;QACL,CAAC;QACD,6EAA6E;QAC7E,mDAAmD;QACnD,0DAA0D;QAC1D,wCAAwC;QACxC,+HAA+H;QAC/H,4CAA4C;QAC5C,qDAAqD;QAErD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CACxB,SAAS,EACT,EAAE,EACF,cAAc,EACd,aAAa,CAChB,CAAA;QAED,IAAI,CAAC;YACD,OAAO;gBACH,GAAG,GAAG;gBACN,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;aACrC,CAAA;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,GAAG,CAAA;QACd,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,gBAAgB,EAAE,KAAK,WACnB,cAA2C,EAC3C,KAAY,EACZ,IAIC;QAKD,MAAM,OAAO,GAAG,IAAI,EAAE,SAAS,IAAI,KAAM,CAAA;QACzC,MAAM,YAAY,GAAG,IAAI,EAAE,cAAc,IAAI,GAAG,CAAA;QAChD,MAAM,QAAQ,GAAG,IAAI,EAAE,wBAAwB,IAAI,KAAK,CAAA;QAExD,oEAAoE;QACpE,0CAA0C;QAC1C,MAAM,MAAM,GAAG,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAA;QAChE,QAAQ,CAAC,MAAM,EAAE,mDAAmD,CAAC,CAAA;QAErE,qEAAqE;QACrE,gEAAgE;QAChE,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAClD,cAAc,EACd,KAAK,CACR,CAAA;QAED,qEAAqE;QACrE,sEAAsE;QACtE,oEAAoE;QACpE,iFAAiF;QACjF,uEAAuE;QACvE,2EAA2E;QAC3E,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,0BAA0B,GAC5B,YAAY;gBACZ,OAAO,YAAY,KAAK,QAAQ;gBAC/B,YAAoB,CAAC,MAAM,KAAK,GAAG;gBACpC,eAAe,IAAI,YAAY,CAAA;YACnC,IAAI,0BAA0B,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAI,YAAoB,CAAC,QAAQ,CAAA;gBAC5C,MAAM,IAAI,GAAwB,KAAa,EAAE,IAAI,CAAA;gBACrD,MAAM,SAAS,GACX,OAAQ,KAAa,EAAE,QAAQ,EAAE,MAAM,KAAK,QAAQ,CAAA;gBACxD,MAAM,eAAe,GACjB,CAAC,SAAS;oBACV,OAAO,IAAI,KAAK,QAAQ;oBACxB,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACrC,IAAI,eAAe,EAAE,CAAC;oBAClB,MAAM,IAAI,oBAAoB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;gBACrD,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,SAAS,GAAW,SAAS,CAAA;QAEjC,qEAAqE;QACrE,oEAAoE;QACpE,mDAAmD;QACnD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;YAClC,OAAO,EAAE,CAAA;YAET,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAA;YACvD,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,CAC9B,UAAU,EACV,EAAE,EACF,EAAE,IAAI,EAAE,MAAM,EAAE,EAChB,sBAAsB,CACzB,CAAA;YAED,2DAA2D;YAC3D,gEAAgE;YAChE,6DAA6D;YAC7D,+DAA+D;YAC/D,2DAA2D;YAC3D,qCAAqC;YACrC,MAAM,0BAA0B,GAC5B,SAAS;gBACT,OAAO,SAAS,KAAK,QAAQ;gBAC7B,QAAQ,IAAI,SAAS;gBACpB,SAAiB,CAAC,MAAM,KAAK,GAAG;gBACjC,eAAe,IAAI,SAAS,CAAA;YAEhC,IAAI,0BAA0B,EAAE,CAAC;gBAC7B,SAAQ;YACZ,CAAC;YAED,MAAM,KAAK,GACP,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;gBACtC,CAAC,CAAE,SAAiB,CAAC,KAAK;gBAC1B,CAAC,CAAC,SAAS,CAAA;YAEnB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAA;gBACjB,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC7C,MAAM,WAAW,GACZ,SAAiB,CAAC,WAAW,CAAA;oBAClC,OAAO;wBACH,SAAS,EAAE,YAAY;wBACvB,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;qBACjC,CAAA;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,IAAI,qBAAqB,CAAC;YAC5B,MAAM;YACN,aAAa,EAAE,SAAS;YACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAChC,CAAC,CAAA;IACN,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK,CAAC,KAAiB,EAAE,KAAY;QACvC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;QAE/C,IAAI,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAA;QAElC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QAC/D,MAAM,YAAY,GAAG,eAAe,CAAC,SAAuB,CAAC,CAAA;QAC7D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAEvD,kDAAkD;QAClD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAEzD,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,YAAY,CAAA,CAAC,4CAA4C;QACzE,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAA;QAC5B,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,oDAAoD;QAC1E,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAA;QAC3B,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACjC,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG;YACd,SAAS;YACT,EAAE,KAAK,EAAE,WAAW,EAAE;SACzB,CAAA;QAED,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,oBAAoB,CACtB,OAAe,EACf,gBAAwB,EACxB,gBAAwB,EACxB,KAAY;QAEZ,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;QAC/C,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;QACzC,QAAQ,CAAC,gBAAgB,EAAE,+BAA+B,CAAC,CAAA;QAC3D,QAAQ,CAAC,gBAAgB,IAAI,CAAC,EAAE,wCAAwC,CAAC,CAAA;QAEzE,IAAI,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAA;QAElC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QAC/D,MAAM,YAAY,GAAG,eAAe,CAAC,SAAuB,CAAC,CAAA;QAC7D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAEvD,6DAA6D;QAC7D,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,YAAY,CAAA;QAC5B,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAA;QAC5B,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,wCAAwC;QAC9D,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAA;QACpC,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACjC,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG;YACd,kBAAkB;YAClB;gBACI,QAAQ,EAAE,OAAO;gBACjB,iBAAiB,EAAE,gBAAgB;gBACnC,iBAAiB,EAAE,gBAAgB;gBACnC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACL;SACvB,CAAA;QAED,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,+FAA+F;CAClG,CAAA"}
|
|
1
|
+
{"version":3,"file":"DemosTransactions.js","sourceRoot":"","sources":["../../../src/websdk/DemosTransactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { Transaction } from "../types/blockchain/Transaction";
|
|
|
6
6
|
* Note that the node will be responsible for checking if the gas can be paid.
|
|
7
7
|
*/
|
|
8
8
|
export declare class GCRGeneration {
|
|
9
|
+
private static requirePayload;
|
|
9
10
|
static generate(tx: Transaction, isRollback?: boolean): Promise<GCREdit[]>;
|
|
10
11
|
static createGasEdit(account: string, txHash: string, isRollback?: boolean, gasAmount?: number): Promise<GCREdit>;
|
|
11
12
|
/**
|
|
@@ -63,8 +64,16 @@ export declare class HandleD402Operations {
|
|
|
63
64
|
*/
|
|
64
65
|
export declare class HandleStorageProgramOperations {
|
|
65
66
|
/**
|
|
66
|
-
* Calculate the storage fee based on data size
|
|
67
|
-
*
|
|
67
|
+
* Calculate the storage fee based on data size.
|
|
68
|
+
*
|
|
69
|
+
* Pricing: 1 DEM per 10KB chunk (rounded up, minimum 1 DEM).
|
|
70
|
+
*
|
|
71
|
+
* P4: arithmetic in `bigint` OS (the smallest unit). Returned as a
|
|
72
|
+
* pair `{ feeOs, feeDem }` so callers can write the legacy DEM-number
|
|
73
|
+
* shape onto the wire while retaining bigint OS internally for
|
|
74
|
+
* future post-fork serializer use. The DEM number is exact whenever
|
|
75
|
+
* the OS amount is a whole multiple of `OS_PER_DEM`, which it
|
|
76
|
+
* always is for this fee schedule.
|
|
68
77
|
*/
|
|
69
78
|
private static calculateStorageFee;
|
|
70
79
|
static handle(tx: Transaction, isRollback?: boolean): Promise<GCREdit[]>;
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import { Hashing } from "../encryption/Hashing.js";
|
|
2
2
|
import { STORAGE_PROGRAM_CONSTANTS, } from "../types/blockchain/TransactionSubtypes/StorageProgramTransaction.js";
|
|
3
|
+
import { OS_PER_DEM } from "../denomination/index.js";
|
|
3
4
|
/**
|
|
4
5
|
* This class is responsible for generating the GCREdit for a transaction and is used
|
|
5
6
|
* both in the client and the node.
|
|
6
7
|
* Note that the node will be responsible for checking if the gas can be paid.
|
|
7
8
|
*/
|
|
8
9
|
export class GCRGeneration {
|
|
10
|
+
// Fail-fast payload extractor — throws explicitly instead of silently
|
|
11
|
+
// defaulting missing/wrong-typed fields, which can flip semantics
|
|
12
|
+
// (e.g. a vote without `approve` would become an implicit reject).
|
|
13
|
+
static requirePayload(content, expectedType) {
|
|
14
|
+
const tuple = content.data;
|
|
15
|
+
if (!Array.isArray(tuple) ||
|
|
16
|
+
tuple[0] !== expectedType ||
|
|
17
|
+
tuple[1] == null ||
|
|
18
|
+
typeof tuple[1] !== "object") {
|
|
19
|
+
throw new Error(`[GCRGeneration] Invalid payload for ${expectedType} transaction`);
|
|
20
|
+
}
|
|
21
|
+
return tuple[1];
|
|
22
|
+
}
|
|
9
23
|
static async generate(tx, isRollback = false) {
|
|
10
24
|
const gcrEdits = [];
|
|
11
25
|
const { content } = tx;
|
|
@@ -42,6 +56,106 @@ export class GCRGeneration {
|
|
|
42
56
|
gcrEdits.push(...storageProgramEdits);
|
|
43
57
|
break;
|
|
44
58
|
}
|
|
59
|
+
// Phase 0 staking — synthesize a GCREditValidatorStake from
|
|
60
|
+
// the tx payload. Server-side handleStakingTx still validates
|
|
61
|
+
// policy (sender is validator, lock elapsed, etc.) but does
|
|
62
|
+
// NOT mutate gcr_edits — this generator runs identically on
|
|
63
|
+
// both sides so the hash comparison in handleValidateTransaction
|
|
64
|
+
// matches.
|
|
65
|
+
case "validatorStake": {
|
|
66
|
+
const p = this.requirePayload(content, "validatorStake");
|
|
67
|
+
if (typeof p.amount !== "string" || !/^\d+$/.test(p.amount)) {
|
|
68
|
+
throw new Error("[GCRGeneration] validatorStake.amount must be a non-negative bigint string");
|
|
69
|
+
}
|
|
70
|
+
if (typeof p.connectionUrl !== "string") {
|
|
71
|
+
throw new Error("[GCRGeneration] validatorStake.connectionUrl must be a string");
|
|
72
|
+
}
|
|
73
|
+
gcrEdits.push({
|
|
74
|
+
type: "validatorStake",
|
|
75
|
+
isRollback,
|
|
76
|
+
account: content.from_ed25519_address,
|
|
77
|
+
operation: "stake",
|
|
78
|
+
amount: p.amount,
|
|
79
|
+
connectionUrl: p.connectionUrl,
|
|
80
|
+
txhash: tx.hash,
|
|
81
|
+
});
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case "validatorUnstake": {
|
|
85
|
+
gcrEdits.push({
|
|
86
|
+
type: "validatorStake",
|
|
87
|
+
isRollback,
|
|
88
|
+
account: content.from_ed25519_address,
|
|
89
|
+
operation: "unstake",
|
|
90
|
+
amount: "0",
|
|
91
|
+
txhash: tx.hash,
|
|
92
|
+
});
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case "validatorExit": {
|
|
96
|
+
gcrEdits.push({
|
|
97
|
+
type: "validatorStake",
|
|
98
|
+
isRollback,
|
|
99
|
+
account: content.from_ed25519_address,
|
|
100
|
+
operation: "exit",
|
|
101
|
+
amount: "0",
|
|
102
|
+
txhash: tx.hash,
|
|
103
|
+
});
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
// Phase 1 governance — proposal + vote. Server-derived
|
|
107
|
+
// fields (version, snapshotBlock, tallyBlock, weight,
|
|
108
|
+
// blockNumber) are filled at apply time by
|
|
109
|
+
// GCRNetworkUpgradeRoutines so the edit shape stays
|
|
110
|
+
// deterministic from tx content alone.
|
|
111
|
+
case "networkUpgrade": {
|
|
112
|
+
const p = this.requirePayload(content, "networkUpgrade");
|
|
113
|
+
if (typeof p.proposalId !== "string" || !p.proposalId) {
|
|
114
|
+
throw new Error("[GCRGeneration] networkUpgrade.proposalId must be a non-empty string");
|
|
115
|
+
}
|
|
116
|
+
if (typeof p.proposedParameters !== "object" ||
|
|
117
|
+
p.proposedParameters === null ||
|
|
118
|
+
Array.isArray(p.proposedParameters)) {
|
|
119
|
+
throw new Error("[GCRGeneration] networkUpgrade.proposedParameters must be a plain object");
|
|
120
|
+
}
|
|
121
|
+
if (typeof p.rationale !== "string") {
|
|
122
|
+
throw new Error("[GCRGeneration] networkUpgrade.rationale must be a string");
|
|
123
|
+
}
|
|
124
|
+
if (typeof p.effectiveAtBlock !== "number" ||
|
|
125
|
+
!Number.isInteger(p.effectiveAtBlock) ||
|
|
126
|
+
p.effectiveAtBlock < 0) {
|
|
127
|
+
throw new Error("[GCRGeneration] networkUpgrade.effectiveAtBlock must be a non-negative integer");
|
|
128
|
+
}
|
|
129
|
+
gcrEdits.push({
|
|
130
|
+
type: "networkUpgrade",
|
|
131
|
+
isRollback,
|
|
132
|
+
account: content.from_ed25519_address,
|
|
133
|
+
proposalId: p.proposalId,
|
|
134
|
+
proposedParameters: p.proposedParameters,
|
|
135
|
+
rationale: p.rationale,
|
|
136
|
+
effectiveAtBlock: p.effectiveAtBlock,
|
|
137
|
+
txhash: tx.hash,
|
|
138
|
+
});
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
case "networkUpgradeVote": {
|
|
142
|
+
const p = this.requirePayload(content, "networkUpgradeVote");
|
|
143
|
+
if (typeof p.proposalId !== "string" || !p.proposalId) {
|
|
144
|
+
throw new Error("[GCRGeneration] networkUpgradeVote.proposalId must be a non-empty string");
|
|
145
|
+
}
|
|
146
|
+
if (typeof p.approve !== "boolean") {
|
|
147
|
+
throw new Error("[GCRGeneration] networkUpgradeVote.approve must be a boolean");
|
|
148
|
+
}
|
|
149
|
+
gcrEdits.push({
|
|
150
|
+
type: "networkUpgradeVote",
|
|
151
|
+
isRollback,
|
|
152
|
+
account: content.from_ed25519_address,
|
|
153
|
+
proposalId: p.proposalId,
|
|
154
|
+
approve: p.approve,
|
|
155
|
+
txhash: tx.hash,
|
|
156
|
+
});
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
45
159
|
}
|
|
46
160
|
// SECTION Operations valid for all tx types
|
|
47
161
|
// Add gas operation edit with check for availability of gas amount in the sender's balance
|
|
@@ -432,12 +546,21 @@ export class HandleD402Operations {
|
|
|
432
546
|
*/
|
|
433
547
|
export class HandleStorageProgramOperations {
|
|
434
548
|
/**
|
|
435
|
-
* Calculate the storage fee based on data size
|
|
436
|
-
*
|
|
549
|
+
* Calculate the storage fee based on data size.
|
|
550
|
+
*
|
|
551
|
+
* Pricing: 1 DEM per 10KB chunk (rounded up, minimum 1 DEM).
|
|
552
|
+
*
|
|
553
|
+
* P4: arithmetic in `bigint` OS (the smallest unit). Returned as a
|
|
554
|
+
* pair `{ feeOs, feeDem }` so callers can write the legacy DEM-number
|
|
555
|
+
* shape onto the wire while retaining bigint OS internally for
|
|
556
|
+
* future post-fork serializer use. The DEM number is exact whenever
|
|
557
|
+
* the OS amount is a whole multiple of `OS_PER_DEM`, which it
|
|
558
|
+
* always is for this fee schedule.
|
|
437
559
|
*/
|
|
438
560
|
static calculateStorageFee(data, encoding = "json") {
|
|
439
|
-
if (!data)
|
|
440
|
-
return
|
|
561
|
+
if (!data) {
|
|
562
|
+
return { feeOs: OS_PER_DEM, feeDem: 1 };
|
|
563
|
+
}
|
|
441
564
|
let sizeBytes;
|
|
442
565
|
if (encoding === "binary") {
|
|
443
566
|
// Binary: base64 string, decode to get actual bytes
|
|
@@ -449,10 +572,12 @@ export class HandleStorageProgramOperations {
|
|
|
449
572
|
const jsonString = JSON.stringify(data);
|
|
450
573
|
sizeBytes = new TextEncoder().encode(jsonString).length;
|
|
451
574
|
}
|
|
452
|
-
const chunks = Math.ceil(sizeBytes / STORAGE_PROGRAM_CONSTANTS.PRICING_CHUNK_BYTES);
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
575
|
+
const chunks = Math.max(1, Math.ceil(sizeBytes / STORAGE_PROGRAM_CONSTANTS.PRICING_CHUNK_BYTES));
|
|
576
|
+
const feeOs = BigInt(chunks) * STORAGE_PROGRAM_CONSTANTS.FEE_PER_CHUNK;
|
|
577
|
+
// OS_PER_DEM divides feeOs cleanly because FEE_PER_CHUNK ===
|
|
578
|
+
// OS_PER_DEM (P4) and `chunks` is a finite positive integer.
|
|
579
|
+
const feeDem = Number(feeOs / OS_PER_DEM);
|
|
580
|
+
return { feeOs, feeDem };
|
|
456
581
|
}
|
|
457
582
|
static async handle(tx, isRollback = false) {
|
|
458
583
|
const edits = [];
|
|
@@ -462,15 +587,18 @@ export class HandleStorageProgramOperations {
|
|
|
462
587
|
const { operation, storageAddress, encoding = "json", data } = payload;
|
|
463
588
|
switch (operation) {
|
|
464
589
|
case "CREATE_STORAGE_PROGRAM": {
|
|
465
|
-
// Calculate and burn the storage fee
|
|
466
|
-
|
|
590
|
+
// Calculate and burn the storage fee. Emit DEM-number on
|
|
591
|
+
// the wire (legacy shape); P4 commit 2's serializerGate
|
|
592
|
+
// will re-encode to OS-string when the connected node is
|
|
593
|
+
// post-fork.
|
|
594
|
+
const { feeDem } = this.calculateStorageFee(data, encoding);
|
|
467
595
|
const burnFeeEdit = {
|
|
468
596
|
type: "balance",
|
|
469
597
|
operation: "remove",
|
|
470
598
|
isRollback: isRollback,
|
|
471
599
|
account: tx.content.from_ed25519_address,
|
|
472
600
|
txhash: tx.hash,
|
|
473
|
-
amount:
|
|
601
|
+
amount: feeDem,
|
|
474
602
|
};
|
|
475
603
|
edits.push(burnFeeEdit);
|
|
476
604
|
// Create the storage program edit
|
|
@@ -492,15 +620,16 @@ export class HandleStorageProgramOperations {
|
|
|
492
620
|
break;
|
|
493
621
|
}
|
|
494
622
|
case "WRITE_STORAGE": {
|
|
495
|
-
// Calculate and burn the storage fee for the new data
|
|
496
|
-
|
|
623
|
+
// Calculate and burn the storage fee for the new data.
|
|
624
|
+
// Same legacy-DEM-number wire shape as CREATE_STORAGE_PROGRAM.
|
|
625
|
+
const { feeDem } = this.calculateStorageFee(data, encoding);
|
|
497
626
|
const burnFeeEdit = {
|
|
498
627
|
type: "balance",
|
|
499
628
|
operation: "remove",
|
|
500
629
|
isRollback: isRollback,
|
|
501
630
|
account: tx.content.from_ed25519_address,
|
|
502
631
|
txhash: tx.hash,
|
|
503
|
-
amount:
|
|
632
|
+
amount: feeDem,
|
|
504
633
|
};
|
|
505
634
|
edits.push(burnFeeEdit);
|
|
506
635
|
// Create the write storage edit
|