@alephium/web3 0.5.0-rc.12 → 0.5.0-rc.14

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.
@@ -257,6 +257,8 @@ export interface CallContractResult<R> {
257
257
  txOutputs: Output[];
258
258
  events: ContractEvent[];
259
259
  }
260
+ export declare const CreateContractEventAddress: string;
261
+ export declare const DestroyContractEventAddress: string;
260
262
  export interface SystemEventSig extends EventSig {
261
263
  optionalFieldNames?: string[];
262
264
  optionalFieldTypes?: string[];
@@ -279,10 +281,11 @@ export declare abstract class ContractInstance {
279
281
  constructor(address: Address);
280
282
  }
281
283
  export declare function fetchContractState<F extends Fields, I extends ContractInstance>(contract: ContractFactory<I, F>, instance: ContractInstance): Promise<ContractState<F>>;
282
- export declare function subscribeContractCreatedEvent(instance: ContractInstance, options: SubscribeOptions<ContractCreatedEvent>, fromCount?: number): EventSubscription;
283
- export declare function subscribeContractDestroyedEvent(instance: ContractInstance, options: SubscribeOptions<ContractDestroyedEvent>, fromCount?: number): EventSubscription;
284
+ export declare function subscribeContractCreatedEvent(options: SubscribeOptions<ContractCreatedEvent>, fromCount?: number): EventSubscription;
285
+ export declare function subscribeContractDestroyedEvent(options: SubscribeOptions<ContractDestroyedEvent>, fromCount?: number): EventSubscription;
284
286
  export declare function decodeEvent<F extends Fields, M extends ContractEvent<F>>(contract: Contract, instance: ContractInstance, event: node.ContractEvent, targetEventIndex: number): M;
285
287
  export declare function subscribeContractEvent<F extends Fields, M extends ContractEvent<F>>(contract: Contract, instance: ContractInstance, options: SubscribeOptions<M>, eventName: string, fromCount?: number): EventSubscription;
286
- export declare function subscribeAllEvents(contract: Contract, instance: ContractInstance, options: SubscribeOptions<ContractEvent<any>>, fromCount?: number): EventSubscription;
288
+ export declare function subscribeContractEvents(contract: Contract, instance: ContractInstance, options: SubscribeOptions<ContractEvent<any>>, fromCount?: number): EventSubscription;
287
289
  export declare function callMethod<I, F extends Fields, A extends Arguments, R>(contract: ContractFactory<I, F>, instance: ContractInstance, methodName: string, params: Optional<CallContractParams<A>, 'args'>): Promise<CallContractResult<R>>;
290
+ export declare function getContractEventsCurrentCount(contractAddress: Address): Promise<number>;
288
291
  export {};
@@ -43,7 +43,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
43
43
  return (mod && mod.__esModule) ? mod : { "default": mod };
44
44
  };
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
- exports.callMethod = exports.subscribeAllEvents = exports.subscribeContractEvent = exports.decodeEvent = exports.subscribeContractDestroyedEvent = exports.subscribeContractCreatedEvent = exports.fetchContractState = exports.ContractInstance = exports.testMethod = exports.subscribeEventsFromContract = exports.decodeContractDestroyedEvent = exports.decodeContractCreatedEvent = exports.ContractFactory = exports.randomTxId = exports.toApiVals = exports.Script = exports.Contract = exports.Artifact = exports.Project = exports.DEFAULT_COMPILER_OPTIONS = exports.DEFAULT_NODE_COMPILER_OPTIONS = void 0;
46
+ exports.getContractEventsCurrentCount = exports.callMethod = exports.subscribeContractEvents = exports.subscribeContractEvent = exports.decodeEvent = exports.subscribeContractDestroyedEvent = exports.subscribeContractCreatedEvent = exports.fetchContractState = exports.ContractInstance = exports.testMethod = exports.subscribeEventsFromContract = exports.decodeContractDestroyedEvent = exports.decodeContractCreatedEvent = exports.DestroyContractEventAddress = exports.CreateContractEventAddress = exports.ContractFactory = exports.randomTxId = exports.toApiVals = exports.Script = exports.Contract = exports.Artifact = exports.Project = exports.DEFAULT_COMPILER_OPTIONS = exports.DEFAULT_NODE_COMPILER_OPTIONS = void 0;
47
47
  const buffer_1 = require("buffer/");
48
48
  const crypto_1 = require("crypto");
49
49
  const fs_1 = __importDefault(require("fs"));
@@ -886,6 +886,13 @@ class ContractFactory {
886
886
  }
887
887
  }
888
888
  exports.ContractFactory = ContractFactory;
889
+ function specialContractAddress(n) {
890
+ const bytes = new Uint8Array(32).fill(0);
891
+ bytes[31] = n;
892
+ return (0, utils_1.addressFromContractId)((0, utils_1.binToHex)(bytes));
893
+ }
894
+ exports.CreateContractEventAddress = specialContractAddress(-1);
895
+ exports.DestroyContractEventAddress = specialContractAddress(-2);
889
896
  function decodeSystemEvent(event, systemEventSig, eventIndex) {
890
897
  if (event.eventIndex !== eventIndex) {
891
898
  throw new Error(`Invalid event index: ${event.eventIndex}, expected: ${eventIndex}`);
@@ -968,20 +975,20 @@ async function fetchContractState(contract, instance) {
968
975
  };
969
976
  }
970
977
  exports.fetchContractState = fetchContractState;
971
- function subscribeContractCreatedEvent(instance, options, fromCount) {
972
- return subscribeEventsFromContract(options, instance.address, Contract.ContractCreatedEventIndex, (event) => {
978
+ function subscribeContractCreatedEvent(options, fromCount) {
979
+ return subscribeEventsFromContract(options, exports.CreateContractEventAddress, Contract.ContractCreatedEventIndex, (event) => {
973
980
  return {
974
981
  ...decodeContractCreatedEvent(event),
975
- contractAddress: instance.address
982
+ contractAddress: exports.CreateContractEventAddress
976
983
  };
977
984
  }, fromCount);
978
985
  }
979
986
  exports.subscribeContractCreatedEvent = subscribeContractCreatedEvent;
980
- function subscribeContractDestroyedEvent(instance, options, fromCount) {
981
- return subscribeEventsFromContract(options, instance.address, Contract.ContractDestroyedEventIndex, (event) => {
987
+ function subscribeContractDestroyedEvent(options, fromCount) {
988
+ return subscribeEventsFromContract(options, exports.DestroyContractEventAddress, Contract.ContractDestroyedEventIndex, (event) => {
982
989
  return {
983
990
  ...decodeContractDestroyedEvent(event),
984
- contractAddress: instance.address
991
+ contractAddress: exports.DestroyContractEventAddress
985
992
  };
986
993
  }, fromCount);
987
994
  }
@@ -1010,27 +1017,12 @@ function subscribeContractEvent(contract, instance, options, eventName, fromCoun
1010
1017
  return subscribeEventsFromContract(options, instance.address, eventIndex, (event) => decodeEvent(contract, instance, event, eventIndex), fromCount);
1011
1018
  }
1012
1019
  exports.subscribeContractEvent = subscribeContractEvent;
1013
- function subscribeAllEvents(contract, instance, options, fromCount) {
1020
+ function subscribeContractEvents(contract, instance, options, fromCount) {
1014
1021
  const messageCallback = (event) => {
1015
- switch (event.eventIndex) {
1016
- case Contract.ContractCreatedEventIndex: {
1017
- return options.messageCallback({
1018
- ...decodeContractCreatedEvent(event),
1019
- contractAddress: instance.address
1020
- });
1021
- }
1022
- case Contract.ContractDestroyedEventIndex: {
1023
- return options.messageCallback({
1024
- ...decodeContractDestroyedEvent(event),
1025
- contractAddress: instance.address
1026
- });
1027
- }
1028
- default:
1029
- return options.messageCallback({
1030
- ...decodeEvent(contract, instance, event, event.eventIndex),
1031
- contractAddress: instance.address
1032
- });
1033
- }
1022
+ return options.messageCallback({
1023
+ ...decodeEvent(contract, instance, event, event.eventIndex),
1024
+ contractAddress: instance.address
1025
+ });
1034
1026
  };
1035
1027
  const errorCallback = (err, subscription) => {
1036
1028
  return options.errorCallback(err, subscription);
@@ -1042,7 +1034,7 @@ function subscribeAllEvents(contract, instance, options, fromCount) {
1042
1034
  };
1043
1035
  return (0, events_1.subscribeToEvents)(opt, instance.address, fromCount);
1044
1036
  }
1045
- exports.subscribeAllEvents = subscribeAllEvents;
1037
+ exports.subscribeContractEvents = subscribeContractEvents;
1046
1038
  async function callMethod(contract, instance, methodName, params) {
1047
1039
  const methodIndex = contract.contract.getMethodIndex(methodName);
1048
1040
  const txId = params?.txId ?? randomTxId();
@@ -1052,3 +1044,14 @@ async function callMethod(contract, instance, methodName, params) {
1052
1044
  return callResult;
1053
1045
  }
1054
1046
  exports.callMethod = callMethod;
1047
+ async function getContractEventsCurrentCount(contractAddress) {
1048
+ return (0, global_1.getCurrentNodeProvider)()
1049
+ .events.getEventsContractContractaddressCurrentCount(contractAddress)
1050
+ .catch((error) => {
1051
+ if (error instanceof Error && error.message.includes(`${contractAddress} not found`)) {
1052
+ return 0;
1053
+ }
1054
+ throw error;
1055
+ });
1056
+ }
1057
+ exports.getContractEventsCurrentCount = getContractEventsCurrentCount;
@@ -1,6 +1,6 @@
1
1
  import { ExplorerProvider, NodeProvider } from '../api';
2
2
  import { node } from '../api';
3
- import { Account, EnableOptionsBase, Destination, SignDeployContractTxParams, SignDeployContractTxResult, SignExecuteScriptTxParams, SignExecuteScriptTxResult, SignMessageParams, SignMessageResult, SignTransferTxParams, SignTransferTxResult, SignUnsignedTxParams, SignUnsignedTxResult, SubmissionResult, SubmitTransactionParams, KeyType } from './types';
3
+ import { Account, EnableOptionsBase, Destination, SignDeployContractTxParams, SignDeployContractTxResult, SignExecuteScriptTxParams, SignExecuteScriptTxResult, SignMessageParams, SignMessageResult, SignTransferTxParams, SignTransferTxResult, SignUnsignedTxParams, SignUnsignedTxResult, SubmissionResult, SubmitTransactionParams, KeyType, MessageHasher } from './types';
4
4
  export declare abstract class SignerProvider {
5
5
  abstract get nodeProvider(): NodeProvider | undefined;
6
6
  abstract get explorerProvider(): ExplorerProvider | undefined;
@@ -52,7 +52,9 @@ export declare abstract class SignerProviderWithCachedAccounts<T extends Account
52
52
  getAccounts(): Promise<T[]>;
53
53
  getAccount(address: string): Promise<T>;
54
54
  }
55
- export declare function verifySignedMessage(message: string, publicKey: string, signature: string, keyType?: KeyType): boolean;
55
+ export declare function extendMessage(message: string): string;
56
+ export declare function hashMessage(message: string, hasher: MessageHasher): string;
57
+ export declare function verifySignedMessage(message: string, messageHasher: MessageHasher, publicKey: string, signature: string, keyType?: KeyType): boolean;
56
58
  export declare function toApiDestination(data: Destination): node.Destination;
57
59
  export declare function toApiDestinations(data: Destination[]): node.Destination[];
58
60
  export declare function fromApiDestination(data: node.Destination): Destination;
@@ -43,7 +43,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
43
43
  return (mod && mod.__esModule) ? mod : { "default": mod };
44
44
  };
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
- exports.fromApiDestination = exports.toApiDestinations = exports.toApiDestination = exports.verifySignedMessage = exports.SignerProviderWithCachedAccounts = exports.SignerProviderWithMultipleAccounts = exports.SignerProviderSimple = exports.InteractiveSignerProvider = exports.SignerProvider = void 0;
46
+ exports.fromApiDestination = exports.toApiDestinations = exports.toApiDestination = exports.verifySignedMessage = exports.hashMessage = exports.extendMessage = exports.SignerProviderWithCachedAccounts = exports.SignerProviderWithMultipleAccounts = exports.SignerProviderSimple = exports.InteractiveSignerProvider = exports.SignerProvider = void 0;
47
+ const buffer_1 = require("buffer/");
48
+ const crypto_1 = require("crypto");
47
49
  const api_1 = require("../api");
48
50
  const utils = __importStar(require("../utils"));
49
51
  const blakejs_1 = __importDefault(require("blakejs"));
@@ -135,9 +137,8 @@ class SignerProviderSimple extends SignerProvider {
135
137
  return { signature, ...response };
136
138
  }
137
139
  async signMessage(params) {
138
- const extendedMessage = extendMessage(params.message);
139
- const messageHash = blakejs_1.default.blake2b(extendedMessage, undefined, 32);
140
- const signature = await this.signRaw(params.signerAddress, utils.binToHex(messageHash));
140
+ const messageHash = hashMessage(params.message, params.messageHasher);
141
+ const signature = await this.signRaw(params.signerAddress, messageHash);
141
142
  return { signature: signature };
142
143
  }
143
144
  }
@@ -198,10 +199,27 @@ exports.SignerProviderWithCachedAccounts = SignerProviderWithCachedAccounts;
198
199
  function extendMessage(message) {
199
200
  return 'Alephium Signed Message: ' + message;
200
201
  }
201
- function verifySignedMessage(message, publicKey, signature, keyType) {
202
- const extendedMessage = extendMessage(message);
203
- const messageHash = blakejs_1.default.blake2b(extendedMessage, undefined, 32);
204
- return utils.verifySignature(utils.binToHex(messageHash), publicKey, signature, keyType);
202
+ exports.extendMessage = extendMessage;
203
+ function hashMessage(message, hasher) {
204
+ switch (hasher) {
205
+ case 'alephium':
206
+ return utils.binToHex(blakejs_1.default.blake2b(extendMessage(message), undefined, 32));
207
+ case 'sha256':
208
+ const sha256 = (0, crypto_1.createHash)('sha256');
209
+ sha256.update(buffer_1.Buffer.from(message));
210
+ return utils.binToHex(sha256.digest());
211
+ case 'blake2b':
212
+ return utils.binToHex(blakejs_1.default.blake2b(message, undefined, 32));
213
+ case 'identity':
214
+ return message;
215
+ default:
216
+ throw Error(`Invalid message hasher: ${hasher}`);
217
+ }
218
+ }
219
+ exports.hashMessage = hashMessage;
220
+ function verifySignedMessage(message, messageHasher, publicKey, signature, keyType) {
221
+ const messageHash = hashMessage(message, messageHasher);
222
+ return utils.verifySignature(messageHash, publicKey, signature, keyType);
205
223
  }
206
224
  exports.verifySignedMessage = verifySignedMessage;
207
225
  function toApiDestination(data) {
@@ -88,10 +88,12 @@ export interface SignUnsignedTxResult {
88
88
  gasAmount: number;
89
89
  gasPrice: Number256;
90
90
  }
91
+ export declare type MessageHasher = 'alephium' | 'sha256' | 'blake2b' | 'identity';
91
92
  export interface SignMessageParams {
92
93
  signerAddress: string;
93
94
  signerKeyType?: KeyType;
94
95
  message: string;
96
+ messageHasher: MessageHasher;
95
97
  }
96
98
  export interface SignMessageResult {
97
99
  signature: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alephium/web3",
3
- "version": "0.5.0-rc.12",
3
+ "version": "0.5.0-rc.14",
4
4
  "description": "A JS/TS library to interact with the Alephium platform",
5
5
  "license": "GPL",
6
6
  "main": "dist/src/index.js",
@@ -53,7 +53,8 @@ import {
53
53
  assertType,
54
54
  Eq,
55
55
  Optional,
56
- groupOfAddress
56
+ groupOfAddress,
57
+ addressFromContractId
57
58
  } from '../utils'
58
59
  import { getCurrentNodeProvider } from '../global'
59
60
  import * as path from 'path'
@@ -1360,6 +1361,15 @@ export interface CallContractResult<R> {
1360
1361
  events: ContractEvent[]
1361
1362
  }
1362
1363
 
1364
+ function specialContractAddress(n: number): string {
1365
+ const bytes = new Uint8Array(32).fill(0)
1366
+ bytes[31] = n
1367
+ return addressFromContractId(binToHex(bytes))
1368
+ }
1369
+
1370
+ export const CreateContractEventAddress = specialContractAddress(-1)
1371
+ export const DestroyContractEventAddress = specialContractAddress(-2)
1372
+
1363
1373
  export interface SystemEventSig extends EventSig {
1364
1374
  optionalFieldNames?: string[]
1365
1375
  optionalFieldTypes?: string[]
@@ -1472,18 +1482,17 @@ export async function fetchContractState<F extends Fields, I extends ContractIns
1472
1482
  }
1473
1483
 
1474
1484
  export function subscribeContractCreatedEvent(
1475
- instance: ContractInstance,
1476
1485
  options: SubscribeOptions<ContractCreatedEvent>,
1477
1486
  fromCount?: number
1478
1487
  ): EventSubscription {
1479
1488
  return subscribeEventsFromContract(
1480
1489
  options,
1481
- instance.address,
1490
+ CreateContractEventAddress,
1482
1491
  Contract.ContractCreatedEventIndex,
1483
1492
  (event) => {
1484
1493
  return {
1485
1494
  ...decodeContractCreatedEvent(event),
1486
- contractAddress: instance.address
1495
+ contractAddress: CreateContractEventAddress
1487
1496
  }
1488
1497
  },
1489
1498
  fromCount
@@ -1491,18 +1500,17 @@ export function subscribeContractCreatedEvent(
1491
1500
  }
1492
1501
 
1493
1502
  export function subscribeContractDestroyedEvent(
1494
- instance: ContractInstance,
1495
1503
  options: SubscribeOptions<ContractDestroyedEvent>,
1496
1504
  fromCount?: number
1497
1505
  ): EventSubscription {
1498
1506
  return subscribeEventsFromContract(
1499
1507
  options,
1500
- instance.address,
1508
+ DestroyContractEventAddress,
1501
1509
  Contract.ContractDestroyedEventIndex,
1502
1510
  (event) => {
1503
1511
  return {
1504
1512
  ...decodeContractDestroyedEvent(event),
1505
- contractAddress: instance.address
1513
+ contractAddress: DestroyContractEventAddress
1506
1514
  }
1507
1515
  },
1508
1516
  fromCount
@@ -1552,34 +1560,17 @@ export function subscribeContractEvent<F extends Fields, M extends ContractEvent
1552
1560
  )
1553
1561
  }
1554
1562
 
1555
- export function subscribeAllEvents(
1563
+ export function subscribeContractEvents(
1556
1564
  contract: Contract,
1557
1565
  instance: ContractInstance,
1558
1566
  options: SubscribeOptions<ContractEvent<any>>,
1559
1567
  fromCount?: number
1560
1568
  ): EventSubscription {
1561
1569
  const messageCallback = (event: node.ContractEvent): Promise<void> => {
1562
- switch (event.eventIndex) {
1563
- case Contract.ContractCreatedEventIndex: {
1564
- return options.messageCallback({
1565
- ...decodeContractCreatedEvent(event),
1566
- contractAddress: instance.address
1567
- })
1568
- }
1569
-
1570
- case Contract.ContractDestroyedEventIndex: {
1571
- return options.messageCallback({
1572
- ...decodeContractDestroyedEvent(event),
1573
- contractAddress: instance.address
1574
- })
1575
- }
1576
-
1577
- default:
1578
- return options.messageCallback({
1579
- ...decodeEvent(contract, instance, event, event.eventIndex),
1580
- contractAddress: instance.address
1581
- })
1582
- }
1570
+ return options.messageCallback({
1571
+ ...decodeEvent(contract, instance, event, event.eventIndex),
1572
+ contractAddress: instance.address
1573
+ })
1583
1574
  }
1584
1575
  const errorCallback = (err: any, subscription: Subscription<node.ContractEvent>): Promise<void> => {
1585
1576
  return options.errorCallback(err, subscription as unknown as Subscription<ContractEvent<any>>)
@@ -1610,3 +1601,14 @@ export async function callMethod<I, F extends Fields, A extends Arguments, R>(
1610
1601
  const callResult = contract.contract.fromApiCallContractResult(result, txId, methodIndex)
1611
1602
  return callResult as CallContractResult<R>
1612
1603
  }
1604
+
1605
+ export async function getContractEventsCurrentCount(contractAddress: Address): Promise<number> {
1606
+ return getCurrentNodeProvider()
1607
+ .events.getEventsContractContractaddressCurrentCount(contractAddress)
1608
+ .catch((error) => {
1609
+ if (error instanceof Error && error.message.includes(`${contractAddress} not found`)) {
1610
+ return 0
1611
+ }
1612
+ throw error
1613
+ })
1614
+ }
@@ -16,6 +16,8 @@ You should have received a copy of the GNU Lesser General Public License
16
16
  along with the library. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
18
 
19
+ import { Buffer } from 'buffer/'
20
+ import { createHash } from 'crypto'
19
21
  import { ExplorerProvider, fromApiNumber256, fromApiTokens, NodeProvider, toApiNumber256, toApiTokens } from '../api'
20
22
  import { node } from '../api'
21
23
  import * as utils from '../utils'
@@ -38,7 +40,8 @@ import {
38
40
  SignUnsignedTxResult,
39
41
  SubmissionResult,
40
42
  SubmitTransactionParams,
41
- KeyType
43
+ KeyType,
44
+ MessageHasher
42
45
  } from './types'
43
46
  import { TransactionBuilder } from './tx-builder'
44
47
  import { addressFromPublicKey, groupOfAddress } from '../utils'
@@ -176,9 +179,8 @@ export abstract class SignerProviderSimple extends SignerProvider {
176
179
  }
177
180
 
178
181
  async signMessage(params: SignMessageParams): Promise<SignMessageResult> {
179
- const extendedMessage = extendMessage(params.message)
180
- const messageHash = blake.blake2b(extendedMessage, undefined, 32)
181
- const signature = await this.signRaw(params.signerAddress, utils.binToHex(messageHash))
182
+ const messageHash = hashMessage(params.message, params.messageHasher)
183
+ const signature = await this.signRaw(params.signerAddress, messageHash)
182
184
  return { signature: signature }
183
185
  }
184
186
 
@@ -242,14 +244,36 @@ export abstract class SignerProviderWithCachedAccounts<T extends Account> extend
242
244
  }
243
245
  }
244
246
 
245
- function extendMessage(message: string): string {
247
+ export function extendMessage(message: string): string {
246
248
  return 'Alephium Signed Message: ' + message
247
249
  }
248
250
 
249
- export function verifySignedMessage(message: string, publicKey: string, signature: string, keyType?: KeyType): boolean {
250
- const extendedMessage = extendMessage(message)
251
- const messageHash = blake.blake2b(extendedMessage, undefined, 32)
252
- return utils.verifySignature(utils.binToHex(messageHash), publicKey, signature, keyType)
251
+ export function hashMessage(message: string, hasher: MessageHasher): string {
252
+ switch (hasher) {
253
+ case 'alephium':
254
+ return utils.binToHex(blake.blake2b(extendMessage(message), undefined, 32))
255
+ case 'sha256':
256
+ const sha256 = createHash('sha256')
257
+ sha256.update(Buffer.from(message))
258
+ return utils.binToHex(sha256.digest())
259
+ case 'blake2b':
260
+ return utils.binToHex(blake.blake2b(message, undefined, 32))
261
+ case 'identity':
262
+ return message
263
+ default:
264
+ throw Error(`Invalid message hasher: ${hasher}`)
265
+ }
266
+ }
267
+
268
+ export function verifySignedMessage(
269
+ message: string,
270
+ messageHasher: MessageHasher,
271
+ publicKey: string,
272
+ signature: string,
273
+ keyType?: KeyType
274
+ ): boolean {
275
+ const messageHash = hashMessage(message, messageHasher)
276
+ return utils.verifySignature(messageHash, publicKey, signature, keyType)
253
277
  }
254
278
 
255
279
  export function toApiDestination(data: Destination): node.Destination {
@@ -136,12 +136,19 @@ export interface SignUnsignedTxResult {
136
136
  }
137
137
  assertType<Eq<SignUnsignedTxResult, SignTransferTxResult>>
138
138
 
139
+ export type MessageHasher =
140
+ | 'alephium' // Message is prefixed with 'Alephium signed message: ' before hashed with blake2b
141
+ | 'sha256'
142
+ | 'blake2b'
143
+ | 'identity' // No hash is used, the message to be 32 bytes
144
+
139
145
  export interface SignMessageParams {
140
146
  signerAddress: string
141
147
  signerKeyType?: KeyType
142
148
  message: string
149
+ messageHasher: MessageHasher
143
150
  }
144
- assertType<Eq<SignMessageParams, { message: string } & SignerAddress>>()
151
+ assertType<Eq<SignMessageParams, { message: string; messageHasher: MessageHasher } & SignerAddress>>()
145
152
  export interface SignMessageResult {
146
153
  signature: string
147
154
  }