@mysten/sui
Version:
Sui TypeScript API
1 lines • 3.5 kB
Source Map (JSON)
{"version":3,"file":"signer.mjs","names":["#pubkey","#signers"],"sources":["../../src/multisig/signer.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\nimport { toBase64 } from '@mysten/bcs';\n\nimport type { SignatureScheme } from '../cryptography/index.js';\nimport { Signer } from '../cryptography/index.js';\nimport type { MultiSigPublicKey } from './publickey.js';\n\nexport class MultiSigSigner extends Signer {\n\t#pubkey: MultiSigPublicKey;\n\t#signers: Signer[];\n\n\tconstructor(pubkey: MultiSigPublicKey, signers: Signer[] = []) {\n\t\tsuper();\n\t\tthis.#pubkey = pubkey;\n\t\tthis.#signers = signers;\n\n\t\tconst uniqueKeys = new Set();\n\t\tlet combinedWeight = 0;\n\n\t\tconst weights = pubkey.getPublicKeys().map(({ weight, publicKey }) => ({\n\t\t\tweight,\n\t\t\taddress: publicKey.toSuiAddress(),\n\t\t}));\n\n\t\tfor (const signer of signers) {\n\t\t\tconst address = signer.toSuiAddress();\n\t\t\tif (uniqueKeys.has(address)) {\n\t\t\t\tthrow new Error(`Can't create MultiSigSigner with duplicate signers`);\n\t\t\t}\n\t\t\tuniqueKeys.add(address);\n\n\t\t\tconst weight = weights.find((w) => w.address === address)?.weight;\n\n\t\t\tif (!weight) {\n\t\t\t\tthrow new Error(`Signer ${address} is not part of the MultiSig public key`);\n\t\t\t}\n\n\t\t\tcombinedWeight += weight;\n\t\t}\n\n\t\tif (combinedWeight < pubkey.getThreshold()) {\n\t\t\tthrow new Error(`Combined weight of signers is less than threshold`);\n\t\t}\n\t}\n\n\tgetKeyScheme(): SignatureScheme {\n\t\treturn 'MultiSig';\n\t}\n\n\tgetPublicKey(): MultiSigPublicKey {\n\t\treturn this.#pubkey;\n\t}\n\n\tsign(_data: Uint8Array): never {\n\t\tthrow new Error(\n\t\t\t'MultiSigSigner does not support signing directly. Use signTransaction or signPersonalMessage instead',\n\t\t);\n\t}\n\n\tasync signTransaction(bytes: Uint8Array) {\n\t\tconst signature = this.#pubkey.combinePartialSignatures(\n\t\t\tawait Promise.all(\n\t\t\t\tthis.#signers.map(async (signer) => (await signer.signTransaction(bytes)).signature),\n\t\t\t),\n\t\t);\n\n\t\treturn {\n\t\t\tsignature,\n\t\t\tbytes: toBase64(bytes),\n\t\t};\n\t}\n\n\tasync signPersonalMessage(bytes: Uint8Array) {\n\t\tconst signature = this.#pubkey.combinePartialSignatures(\n\t\t\tawait Promise.all(\n\t\t\t\tthis.#signers.map(async (signer) => (await signer.signPersonalMessage(bytes)).signature),\n\t\t\t),\n\t\t);\n\n\t\treturn {\n\t\t\tsignature,\n\t\t\tbytes: toBase64(bytes),\n\t\t};\n\t}\n}\n"],"mappings":";;;;AAQA,IAAa,iBAAb,cAAoC,OAAO;CAC1C;CACA;CAEA,YAAY,QAA2B,UAAoB,EAAE,EAAE;AAC9D,SAAO;AACP,QAAKA,SAAU;AACf,QAAKC,UAAW;EAEhB,MAAM,6BAAa,IAAI,KAAK;EAC5B,IAAI,iBAAiB;EAErB,MAAM,UAAU,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,iBAAiB;GACtE;GACA,SAAS,UAAU,cAAc;GACjC,EAAE;AAEH,OAAK,MAAM,UAAU,SAAS;GAC7B,MAAM,UAAU,OAAO,cAAc;AACrC,OAAI,WAAW,IAAI,QAAQ,CAC1B,OAAM,IAAI,MAAM,qDAAqD;AAEtE,cAAW,IAAI,QAAQ;GAEvB,MAAM,SAAS,QAAQ,MAAM,MAAM,EAAE,YAAY,QAAQ,EAAE;AAE3D,OAAI,CAAC,OACJ,OAAM,IAAI,MAAM,UAAU,QAAQ,yCAAyC;AAG5E,qBAAkB;;AAGnB,MAAI,iBAAiB,OAAO,cAAc,CACzC,OAAM,IAAI,MAAM,oDAAoD;;CAItE,eAAgC;AAC/B,SAAO;;CAGR,eAAkC;AACjC,SAAO,MAAKD;;CAGb,KAAK,OAA0B;AAC9B,QAAM,IAAI,MACT,uGACA;;CAGF,MAAM,gBAAgB,OAAmB;AAOxC,SAAO;GACN,WAPiB,MAAKA,OAAQ,yBAC9B,MAAM,QAAQ,IACb,MAAKC,QAAS,IAAI,OAAO,YAAY,MAAM,OAAO,gBAAgB,MAAM,EAAE,UAAU,CACpF,CACD;GAIA,OAAO,SAAS,MAAM;GACtB;;CAGF,MAAM,oBAAoB,OAAmB;AAO5C,SAAO;GACN,WAPiB,MAAKD,OAAQ,yBAC9B,MAAM,QAAQ,IACb,MAAKC,QAAS,IAAI,OAAO,YAAY,MAAM,OAAO,oBAAoB,MAAM,EAAE,UAAU,CACxF,CACD;GAIA,OAAO,SAAS,MAAM;GACtB"}