@monolythium/core-sdk 0.4.10 → 0.4.11
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/index.cjs +172 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +156 -1
- package/dist/index.d.ts +156 -1
- package/dist/index.js +157 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -9582,6 +9582,162 @@ function bigintBytes(value, len) {
|
|
|
9582
9582
|
}
|
|
9583
9583
|
return out;
|
|
9584
9584
|
}
|
|
9585
|
+
var TX_EXTENSION_KIND_MULTISIG = 64;
|
|
9586
|
+
var TX_EXTENSION_MULTISIG_V1 = 1;
|
|
9587
|
+
var MULTISIG_WITNESS_DOMAIN = "MONO_MULTISIG_WITNESS_V1";
|
|
9588
|
+
var MULTISIG_ADDRESS_DERIVATION_DOMAIN2 = "MONO_MULTISIG_BLAKE3_20_V1";
|
|
9589
|
+
var MIN_MULTISIG_MEMBERS = 1;
|
|
9590
|
+
var MAX_MULTISIG_MEMBERS = 64;
|
|
9591
|
+
var WITNESS_DOMAIN_BYTES = new TextEncoder().encode(MULTISIG_WITNESS_DOMAIN);
|
|
9592
|
+
var ADDRESS_DOMAIN_BYTES = new TextEncoder().encode(MULTISIG_ADDRESS_DERIVATION_DOMAIN2);
|
|
9593
|
+
var MultisigError = class extends Error {
|
|
9594
|
+
constructor(message) {
|
|
9595
|
+
super(message);
|
|
9596
|
+
this.name = "MultisigError";
|
|
9597
|
+
}
|
|
9598
|
+
};
|
|
9599
|
+
function toPubkeyBytes(value, label) {
|
|
9600
|
+
return expectBytes(value, ML_DSA_65_PUBLIC_KEY_LEN, label);
|
|
9601
|
+
}
|
|
9602
|
+
function compareBytes2(a, b) {
|
|
9603
|
+
const len = Math.min(a.length, b.length);
|
|
9604
|
+
for (let i = 0; i < len; i++) {
|
|
9605
|
+
if (a[i] !== b[i]) return a[i] - b[i];
|
|
9606
|
+
}
|
|
9607
|
+
return a.length - b.length;
|
|
9608
|
+
}
|
|
9609
|
+
function u64BeBytes2(value) {
|
|
9610
|
+
const out = new Uint8Array(8);
|
|
9611
|
+
let n = value;
|
|
9612
|
+
for (let i = 7; i >= 0; i--) {
|
|
9613
|
+
out[i] = Number(n & 0xffn);
|
|
9614
|
+
n >>= 8n;
|
|
9615
|
+
}
|
|
9616
|
+
return out;
|
|
9617
|
+
}
|
|
9618
|
+
function expectThreshold(threshold) {
|
|
9619
|
+
if (!Number.isInteger(threshold) || threshold < 0 || threshold > 65535) {
|
|
9620
|
+
throw new MultisigError("threshold must be a uint16");
|
|
9621
|
+
}
|
|
9622
|
+
return threshold;
|
|
9623
|
+
}
|
|
9624
|
+
function sortMultisigMembers(members) {
|
|
9625
|
+
return members.map((m, i) => toPubkeyBytes(m, `members[${i}]`)).sort(compareBytes2);
|
|
9626
|
+
}
|
|
9627
|
+
function deriveMultisigAddressBytes(threshold, members) {
|
|
9628
|
+
expectThreshold(threshold);
|
|
9629
|
+
const sorted = sortMultisigMembers(members);
|
|
9630
|
+
const parts = [
|
|
9631
|
+
ADDRESS_DOMAIN_BYTES,
|
|
9632
|
+
Uint8Array.from([threshold >> 8 & 255, threshold & 255])
|
|
9633
|
+
];
|
|
9634
|
+
for (const member of sorted) {
|
|
9635
|
+
parts.push(u64BeBytes2(BigInt(member.length)));
|
|
9636
|
+
parts.push(member);
|
|
9637
|
+
}
|
|
9638
|
+
return blake3_js.blake3(concatBytes2(...parts)).slice(0, 20);
|
|
9639
|
+
}
|
|
9640
|
+
function deriveMultisigAddress(threshold, members) {
|
|
9641
|
+
return addressToTypedBech32("multisig", deriveMultisigAddressBytes(threshold, members));
|
|
9642
|
+
}
|
|
9643
|
+
function validateMultisigRoster(witness) {
|
|
9644
|
+
const n = witness.members.length;
|
|
9645
|
+
if (n < MIN_MULTISIG_MEMBERS || n > MAX_MULTISIG_MEMBERS) {
|
|
9646
|
+
throw new MultisigError("roster size out of range");
|
|
9647
|
+
}
|
|
9648
|
+
if (witness.threshold === 0 || witness.threshold > n) {
|
|
9649
|
+
throw new MultisigError("threshold out of range");
|
|
9650
|
+
}
|
|
9651
|
+
if (witness.signatures.length > n) {
|
|
9652
|
+
throw new MultisigError("more signatures than members");
|
|
9653
|
+
}
|
|
9654
|
+
let prev;
|
|
9655
|
+
for (const member of witness.members) {
|
|
9656
|
+
if (member.algoId !== STANDARD_ALGO_NUMBER_ML_DSA_65) {
|
|
9657
|
+
throw new MultisigError("non-ml-dsa-65 member");
|
|
9658
|
+
}
|
|
9659
|
+
if (member.pubkey.length !== ML_DSA_65_PUBLIC_KEY_LEN) {
|
|
9660
|
+
throw new MultisigError("member pubkey length");
|
|
9661
|
+
}
|
|
9662
|
+
if (prev !== void 0 && compareBytes2(member.pubkey, prev) <= 0) {
|
|
9663
|
+
throw new MultisigError("roster not sorted / duplicate");
|
|
9664
|
+
}
|
|
9665
|
+
prev = member.pubkey;
|
|
9666
|
+
}
|
|
9667
|
+
}
|
|
9668
|
+
function assembleMultisigWitness(threshold, members, signatures = []) {
|
|
9669
|
+
expectThreshold(threshold);
|
|
9670
|
+
const sortedPubkeys = sortMultisigMembers(members);
|
|
9671
|
+
const witness = {
|
|
9672
|
+
threshold,
|
|
9673
|
+
members: sortedPubkeys.map((pubkey) => ({
|
|
9674
|
+
algoId: STANDARD_ALGO_NUMBER_ML_DSA_65,
|
|
9675
|
+
pubkey
|
|
9676
|
+
})),
|
|
9677
|
+
signatures: signatures.map((s, i) => ({
|
|
9678
|
+
memberIndex: expectMemberIndex(s.memberIndex, `signatures[${i}].memberIndex`),
|
|
9679
|
+
signature: expectBytes(s.signature, ML_DSA_65_SIGNATURE_LEN, `signatures[${i}].signature`)
|
|
9680
|
+
}))
|
|
9681
|
+
};
|
|
9682
|
+
validateMultisigRoster(witness);
|
|
9683
|
+
return witness;
|
|
9684
|
+
}
|
|
9685
|
+
function expectMemberIndex(value, label) {
|
|
9686
|
+
if (!Number.isInteger(value) || value < 0 || value > 65535) {
|
|
9687
|
+
throw new MultisigError(`${label} must be a uint16`);
|
|
9688
|
+
}
|
|
9689
|
+
return value;
|
|
9690
|
+
}
|
|
9691
|
+
function multisigMemberIndex(members, pubkey) {
|
|
9692
|
+
const target = toPubkeyBytes(pubkey, "pubkey");
|
|
9693
|
+
const sorted = sortMultisigMembers(members);
|
|
9694
|
+
return sorted.findIndex((m) => compareBytes2(m, target) === 0);
|
|
9695
|
+
}
|
|
9696
|
+
function encodeMultisigWitnessBody(witness) {
|
|
9697
|
+
validateMultisigRoster(witness);
|
|
9698
|
+
const w = new BincodeWriter();
|
|
9699
|
+
w.u16(witness.threshold);
|
|
9700
|
+
w.u64(BigInt(witness.members.length));
|
|
9701
|
+
for (const member of witness.members) {
|
|
9702
|
+
w.u16(member.algoId);
|
|
9703
|
+
w.bytes(member.pubkey);
|
|
9704
|
+
}
|
|
9705
|
+
w.u64(BigInt(witness.signatures.length));
|
|
9706
|
+
for (const sig of witness.signatures) {
|
|
9707
|
+
w.u16(sig.memberIndex);
|
|
9708
|
+
w.bytes(sig.signature);
|
|
9709
|
+
}
|
|
9710
|
+
return concatBytes2(
|
|
9711
|
+
Uint8Array.of(TX_EXTENSION_MULTISIG_V1),
|
|
9712
|
+
WITNESS_DOMAIN_BYTES,
|
|
9713
|
+
w.toBytes()
|
|
9714
|
+
);
|
|
9715
|
+
}
|
|
9716
|
+
function hasMultisigExtension(fields) {
|
|
9717
|
+
return (fields.extensions ?? []).some((ext) => ext.kind === TX_EXTENSION_KIND_MULTISIG);
|
|
9718
|
+
}
|
|
9719
|
+
function stripMultisigExtensions(fields) {
|
|
9720
|
+
if (!hasMultisigExtension(fields)) return fields;
|
|
9721
|
+
return {
|
|
9722
|
+
...fields,
|
|
9723
|
+
extensions: (fields.extensions ?? []).filter((ext) => ext.kind !== TX_EXTENSION_KIND_MULTISIG)
|
|
9724
|
+
};
|
|
9725
|
+
}
|
|
9726
|
+
function multisigBaseSighash(fields) {
|
|
9727
|
+
const base = stripMultisigExtensions(fields);
|
|
9728
|
+
return sha3_js.keccak_256(encodeTransactionForHash(base, 1));
|
|
9729
|
+
}
|
|
9730
|
+
function assembleMultisigSigned(fields, witness) {
|
|
9731
|
+
if (hasMultisigExtension(fields)) {
|
|
9732
|
+
throw new MultisigError("transaction already carries a multisig witness extension");
|
|
9733
|
+
}
|
|
9734
|
+
const body = encodeMultisigWitnessBody(witness);
|
|
9735
|
+
const extensions = [
|
|
9736
|
+
...fields.extensions ?? [],
|
|
9737
|
+
{ kind: TX_EXTENSION_KIND_MULTISIG, body }
|
|
9738
|
+
];
|
|
9739
|
+
return { ...fields, extensions };
|
|
9740
|
+
}
|
|
9585
9741
|
|
|
9586
9742
|
// src/delegation.ts
|
|
9587
9743
|
var DELEGATION_SELECTORS = {
|
|
@@ -11523,9 +11679,11 @@ exports.EXECUTION_UNIT_PRICE_SAFETY_MULTIPLIER = EXECUTION_UNIT_PRICE_SAFETY_MUL
|
|
|
11523
11679
|
exports.FEED_ID_DOMAIN_TAG = FEED_ID_DOMAIN_TAG;
|
|
11524
11680
|
exports.LYTHOSHI_PER_LYTH = LYTHOSHI_PER_LYTH;
|
|
11525
11681
|
exports.LYTH_DECIMALS = LYTH_DECIMALS;
|
|
11682
|
+
exports.MAX_MULTISIG_MEMBERS = MAX_MULTISIG_MEMBERS;
|
|
11526
11683
|
exports.MAX_NATIVE_CALL_FORWARDER_REQUEST_BYTES = MAX_NATIVE_CALL_FORWARDER_REQUEST_BYTES;
|
|
11527
11684
|
exports.MAX_NATIVE_RECEIPT_EVENTS = MAX_NATIVE_RECEIPT_EVENTS;
|
|
11528
11685
|
exports.MIN_EXECUTION_UNIT_PRICE_LYTHOSHI = MIN_EXECUTION_UNIT_PRICE_LYTHOSHI;
|
|
11686
|
+
exports.MIN_MULTISIG_MEMBERS = MIN_MULTISIG_MEMBERS;
|
|
11529
11687
|
exports.ML_DSA_65_PUBLIC_KEY_LEN = ML_DSA_65_PUBLIC_KEY_LEN2;
|
|
11530
11688
|
exports.ML_DSA_65_SIGNATURE_LEN = ML_DSA_65_SIGNATURE_LEN2;
|
|
11531
11689
|
exports.MONOLYTHIUM_NETWORKS = MONOLYTHIUM_NETWORKS;
|
|
@@ -11544,8 +11702,11 @@ exports.MRV_STRUCTURED_FEE_FIELDS = MRV_STRUCTURED_FEE_FIELDS;
|
|
|
11544
11702
|
exports.MRV_TX_EXTENSION_KIND = MRV_TX_EXTENSION_KIND;
|
|
11545
11703
|
exports.MRV_TX_EXTENSION_V1 = MRV_TX_EXTENSION_V1;
|
|
11546
11704
|
exports.MULTISIG_ADDRESS_DERIVATION_DOMAIN = MULTISIG_ADDRESS_DERIVATION_DOMAIN;
|
|
11705
|
+
exports.MULTISIG_WITNESS_ADDRESS_DERIVATION_DOMAIN = MULTISIG_ADDRESS_DERIVATION_DOMAIN2;
|
|
11706
|
+
exports.MULTISIG_WITNESS_DOMAIN = MULTISIG_WITNESS_DOMAIN;
|
|
11547
11707
|
exports.MarketActionError = MarketActionError;
|
|
11548
11708
|
exports.MrvValidationError = MrvValidationError;
|
|
11709
|
+
exports.MultisigError = MultisigError;
|
|
11549
11710
|
exports.NAME_BASE_MULTIPLIER = NAME_BASE_MULTIPLIER;
|
|
11550
11711
|
exports.NAME_FALLBACK_FEE_UNIT_LYTHOSHI = NAME_FALLBACK_FEE_UNIT_LYTHOSHI;
|
|
11551
11712
|
exports.NAME_LABEL_MAX_LEN = NAME_LABEL_MAX_LEN;
|
|
@@ -11642,6 +11803,8 @@ exports.TOKEN_FACTORY_SIGS = TOKEN_FACTORY_SIGS;
|
|
|
11642
11803
|
exports.TOKEN_FACTORY_SYMBOL_MAX_BYTES = TOKEN_FACTORY_SYMBOL_MAX_BYTES;
|
|
11643
11804
|
exports.TOKEN_FACTORY_TOKEN_ID_DOMAIN_TAG = TOKEN_FACTORY_TOKEN_ID_DOMAIN_TAG;
|
|
11644
11805
|
exports.TRANSFER_DEFAULT_EXECUTION_UNIT_LIMIT = TRANSFER_DEFAULT_EXECUTION_UNIT_LIMIT;
|
|
11806
|
+
exports.TX_EXTENSION_KIND_MULTISIG = TX_EXTENSION_KIND_MULTISIG;
|
|
11807
|
+
exports.TX_EXTENSION_MULTISIG_V1 = TX_EXTENSION_MULTISIG_V1;
|
|
11645
11808
|
exports.TokenFactoryError = TokenFactoryError;
|
|
11646
11809
|
exports.V1_BRIDGE_ALLOWED_FEE_TOKEN = V1_BRIDGE_ALLOWED_FEE_TOKEN;
|
|
11647
11810
|
exports.V1_BRIDGE_ALLOWED_PROTOCOL = V1_BRIDGE_ALLOWED_PROTOCOL;
|
|
@@ -11654,6 +11817,8 @@ exports.addressToBech32 = addressToBech32;
|
|
|
11654
11817
|
exports.addressToTypedBech32 = addressToTypedBech32;
|
|
11655
11818
|
exports.allowRootFor = allowRootFor;
|
|
11656
11819
|
exports.apiEndpointFromRpcEndpoint = apiEndpointFromRpcEndpoint;
|
|
11820
|
+
exports.assembleMultisigSigned = assembleMultisigSigned;
|
|
11821
|
+
exports.assembleMultisigWitness = assembleMultisigWitness;
|
|
11657
11822
|
exports.assertMrvCallNativeSubmissionPlan = assertMrvCallNativeSubmissionPlan;
|
|
11658
11823
|
exports.assertMrvDeployNativeSubmissionPlan = assertMrvDeployNativeSubmissionPlan;
|
|
11659
11824
|
exports.assertMrvFeeDisplayConformance = assertMrvFeeDisplayConformance;
|
|
@@ -11761,6 +11926,8 @@ exports.deriveClusterAnchorAddress = deriveClusterAnchorAddress;
|
|
|
11761
11926
|
exports.deriveClusterJoinOperatorId = deriveClusterJoinOperatorId;
|
|
11762
11927
|
exports.deriveFeedId = deriveFeedId;
|
|
11763
11928
|
exports.deriveMrvContractAddress = deriveMrvContractAddress;
|
|
11929
|
+
exports.deriveMultisigAddress = deriveMultisigAddress;
|
|
11930
|
+
exports.deriveMultisigAddressBytes = deriveMultisigAddressBytes;
|
|
11764
11931
|
exports.deriveNativeSpotMarketId = deriveNativeSpotMarketId;
|
|
11765
11932
|
exports.deriveNativeSpotOrderId = deriveNativeSpotOrderId;
|
|
11766
11933
|
exports.deriveTokenFactoryTokenId = deriveTokenFactoryTokenId;
|
|
@@ -11790,6 +11957,7 @@ exports.encodeHasPubkeyCalldata = encodeHasPubkeyCalldata;
|
|
|
11790
11957
|
exports.encodeLockBridgeConfigCalldata = encodeLockBridgeConfigCalldata;
|
|
11791
11958
|
exports.encodeLookupPubkeyCalldata = encodeLookupPubkeyCalldata;
|
|
11792
11959
|
exports.encodeMrvDeployPayload = encodeMrvDeployPayload;
|
|
11960
|
+
exports.encodeMultisigWitnessBody = encodeMultisigWitnessBody;
|
|
11793
11961
|
exports.encodeNameAcceptTransferCall = encodeNameAcceptTransferCall;
|
|
11794
11962
|
exports.encodeNameProposeTransferCall = encodeNameProposeTransferCall;
|
|
11795
11963
|
exports.encodeNameRegisterCall = encodeNameRegisterCall;
|
|
@@ -11905,6 +12073,8 @@ exports.mrvAddressToBech32 = mrvAddressToBech32;
|
|
|
11905
12073
|
exports.mrvBech32ToAddress = mrvBech32ToAddress;
|
|
11906
12074
|
exports.mrvCodeHashHex = mrvCodeHashHex;
|
|
11907
12075
|
exports.mrvV1TransactionExtension = mrvV1TransactionExtension;
|
|
12076
|
+
exports.multisigBaseSighash = multisigBaseSighash;
|
|
12077
|
+
exports.multisigMemberIndex = multisigMemberIndex;
|
|
11908
12078
|
exports.nameLengthModifierX10 = nameLengthModifierX10;
|
|
11909
12079
|
exports.nameRegistrationCost = nameRegistrationCost;
|
|
11910
12080
|
exports.nameRegistryAddressHex = nameRegistryAddressHex;
|
|
@@ -11957,6 +12127,7 @@ exports.resolveStudioHostStatus = resolveStudioHostStatus;
|
|
|
11957
12127
|
exports.selectBridgeTransferRoute = selectBridgeTransferRoute;
|
|
11958
12128
|
exports.serviceProbeStatusLabel = serviceProbeStatusLabel;
|
|
11959
12129
|
exports.setDestinationRoot = setDestinationRoot;
|
|
12130
|
+
exports.sortMultisigMembers = sortMultisigMembers;
|
|
11960
12131
|
exports.spendingPolicyAddressHex = spendingPolicyAddressHex;
|
|
11961
12132
|
exports.submitMrvCallNativeTx = submitMrvCallNativeTx;
|
|
11962
12133
|
exports.submitMrvDeployNativeTx = submitMrvDeployNativeTx;
|
|
@@ -11973,6 +12144,7 @@ exports.validateBridgeRouteCatalogue = validateBridgeRouteCatalogue;
|
|
|
11973
12144
|
exports.validateMrvArtifactMetadata = validateMrvArtifactMetadata;
|
|
11974
12145
|
exports.validateMrvCallRequest = validateMrvCallRequest;
|
|
11975
12146
|
exports.validateMrvDeployRequest = validateMrvDeployRequest;
|
|
12147
|
+
exports.validateMultisigRoster = validateMultisigRoster;
|
|
11976
12148
|
exports.validateTokenFactoryFlags = validateTokenFactoryFlags;
|
|
11977
12149
|
exports.verifyNoEvmArchiveProofSignatures = verifyNoEvmArchiveProofSignatures;
|
|
11978
12150
|
exports.verifyNoEvmBlockFinalityEvidenceMultisig = verifyNoEvmBlockFinalityEvidenceMultisig;
|