Skip to content

Commit c0ef17f

Browse files
committed
chore: build message sample script
TICKET: COIN-4593
1 parent 7eaf1bf commit c0ef17f

File tree

4 files changed

+79
-30
lines changed

4 files changed

+79
-30
lines changed

examples/ts/build-message.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Pre-build a message from the wallet
3+
*
4+
* This tool will help you see how to use the BitGo API to easily build
5+
* a message from a wallet.
6+
*
7+
* Copyright 2025, BitGo, Inc. All Rights Reserved.
8+
*/
9+
10+
import {BitGoAPI} from '@bitgo/sdk-api';
11+
import {Hteth} from "@bitgo/sdk-coin-eth";
12+
import {MessageStandardType} from "@bitgo/sdk-core"; // Replace with your given coin (e.g. Ltc, Tltc)
13+
require('dotenv').config({ path: '../../.env' });
14+
15+
const bitgo = new BitGoAPI({
16+
accessToken: process.env.TESTNET_ACCESS_TOKEN,
17+
env: 'test', // Change this to env: 'production' when you are ready for production
18+
});
19+
20+
// Set the coin name to match the blockchain and network
21+
// doge = dogecoin, tdoge = testnet dogecoin
22+
const coin = 'hteth';
23+
bitgo.register(coin, Hteth.createInstance);
24+
25+
const id = '';
26+
27+
async function main() {
28+
const wallet = await bitgo.coin(coin).wallets().get({ id });
29+
console.log(`Wallet label: ${wallet.label()}`);
30+
31+
const txRequest = await wallet.createSignMessageRequest({
32+
messageRaw: 'Hello, BitGo!',
33+
messageStandardType: MessageStandardType.EIP191,
34+
});
35+
console.dir(txRequest);
36+
}
37+
38+
main().catch((e) => console.log(e));

modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { IWebhooks } from '../webhook/iWebhooks';
1414
import { TransactionType } from '../../account-lib';
1515
import { IInscriptionBuilder } from '../inscriptionBuilder';
1616
import { Hash } from 'crypto';
17-
import { MPCTx, PopulatedIntent, TokenType } from '../utils';
17+
import { MessageStandardType, MPCTx, PopulatedIntent, TokenType } from '../utils';
1818

1919
export const multisigTypes = {
2020
onchain: 'onchain',
@@ -301,6 +301,7 @@ export interface TransactionPrebuild extends BaseSignable {
301301
export interface Message extends BaseSignable {
302302
messageRaw: string;
303303
messageEncoded?: string;
304+
messageStandardType?: MessageStandardType;
304305
}
305306

306307
export interface MessageTypeProperty {
@@ -418,6 +419,7 @@ export interface SignedMessage {
418419
signature: string;
419420
messageRaw: string;
420421
messageEncoded?: string;
422+
messageStandardType?: MessageStandardType;
421423
txRequestId: string;
422424
}
423425

modules/sdk-core/src/bitgo/utils/tss/baseTSSUtils.ts

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { IRequestTracer } from '../../../api';
2+
import * as openpgp from 'openpgp';
23
import { Key, readKey, SerializedKeyPair } from 'openpgp';
34
import { IBaseCoin, KeychainsTriplet } from '../../baseCoin';
45
import { BitGoBase } from '../../bitgoBase';
@@ -10,40 +11,40 @@ import * as _ from 'lodash';
1011
import {
1112
BitgoGPGPublicKey,
1213
BitgoHeldBackupKeyShare,
14+
CommitmentShareRecord,
15+
CreateBitGoKeychainParamsBase,
16+
CreateKeychainParamsBase,
17+
CustomCommitmentGeneratingFunction,
1318
CustomGShareGeneratingFunction,
19+
CustomKShareGeneratingFunction,
20+
CustomMPCv2SigningRound1GeneratingFunction,
21+
CustomMPCv2SigningRound2GeneratingFunction,
22+
CustomMPCv2SigningRound3GeneratingFunction,
23+
CustomMuDeltaShareGeneratingFunction,
24+
CustomPaillierModulusGetterFunction,
1425
CustomRShareGeneratingFunction,
26+
CustomSShareGeneratingFunction,
27+
EncryptedSignerShareRecord,
28+
IntentOptionsForMessage,
29+
IntentOptionsForTypedData,
1530
ITssUtils,
31+
PopulatedIntentForMessageSigning,
32+
PopulatedIntentForTypedDataSigning,
1633
PrebuildTransactionWithIntentOptions,
34+
RequestType,
1735
SignatureShareRecord,
1836
TSSParams,
19-
TxRequest,
20-
TxRequestVersion,
21-
CreateKeychainParamsBase,
22-
IntentOptionsForMessage,
23-
PopulatedIntentForMessageSigning,
24-
IntentOptionsForTypedData,
25-
PopulatedIntentForTypedDataSigning,
26-
CreateBitGoKeychainParamsBase,
27-
CommitmentShareRecord,
28-
EncryptedSignerShareRecord,
29-
CustomCommitmentGeneratingFunction,
3037
TSSParamsForMessage,
31-
RequestType,
32-
CustomPaillierModulusGetterFunction,
33-
CustomKShareGeneratingFunction,
34-
CustomMuDeltaShareGeneratingFunction,
35-
CustomSShareGeneratingFunction,
36-
CustomMPCv2SigningRound1GeneratingFunction,
37-
CustomMPCv2SigningRound2GeneratingFunction,
38-
CustomMPCv2SigningRound3GeneratingFunction,
3938
TSSParamsWithPrv,
39+
TxRequest,
40+
TxRequestVersion,
4041
} from './baseTypes';
4142
import { GShare, SignShare } from '../../../account-lib/mpc/tss';
4243
import { RequestTracer } from '../util';
43-
import * as openpgp from 'openpgp';
4444
import { envRequiresBitgoPubGpgKeyConfig, getBitgoMpcGpgPubKey } from '../../tss/bitgoPubKeys';
4545
import { getBitgoGpgPubKey } from '../opengpgUtils';
4646
import assert from 'assert';
47+
import { MessageStandardType } from '../messageTypes';
4748

4849
/**
4950
* BaseTssUtil class which different signature schemes have to extend
@@ -356,6 +357,7 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
356357

357358
/**
358359
* Create a tx request from params for message signing
360+
* @deprecated Use createSignMessageRequest instead
359361
*
360362
* @param params
361363
* @param apiVersion
@@ -402,7 +404,7 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
402404
memo: params.memo?.value,
403405
isTss: params.isTss,
404406
messageRaw: params.messageRaw,
405-
messageStandardType: params.messageStandardType,
407+
messageStandardType: params.messageStandardType ?? MessageStandardType.UNKNOWN,
406408
messageEncoded: params.messageEncoded ?? '',
407409
};
408410

modules/sdk-core/src/bitgo/wallet/wallet.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3616,28 +3616,35 @@ export class Wallet implements IWallet {
36163616
try {
36173617
let txRequest;
36183618
assert(params.message, 'message required for message signing');
3619+
const messageRaw = params.message.messageRaw;
3620+
36193621
if (!params.message.txRequestId) {
36203622
const intentOption: IntentOptionsForMessage = {
36213623
custodianMessageId: params.custodianMessageId,
36223624
reqId: params.reqId,
36233625
intentType: 'signMessage',
36243626
isTss: true,
3625-
messageRaw: params.message.messageRaw,
3626-
messageEncoded: params.message.messageEncoded,
3627+
messageRaw,
36273628
};
3628-
txRequest = await this.tssUtils!.createTxRequestWithIntentForMessageSigning(intentOption);
3629+
txRequest = await this.tssUtils!.createSignMessageRequest(intentOption);
36293630
params.message.txRequestId = txRequest.txRequestId;
36303631
} else {
36313632
txRequest = await getTxRequest(this.bitgo, this.id(), params.message.txRequestId, params.reqId);
36323633
}
36333634

3635+
assert(
3636+
txRequest.messages && txRequest.messages.length > 0,
3637+
'Unable to find messages in txRequest for message signing'
3638+
);
3639+
const messageEncoded = txRequest.messages[0].messageEncoded;
3640+
36343641
const signedMessageRequest = await this.tssUtils!.signTxRequestForMessage({
36353642
txRequest,
36363643
prv: params.prv,
36373644
reqId: params.reqId || new RequestTracer(),
3638-
messageRaw: params.message.messageRaw,
3639-
messageEncoded: params.message.messageEncoded,
3640-
bufferToSign: Buffer.from(params.message.messageEncoded ?? '', 'hex'),
3645+
messageRaw,
3646+
messageEncoded,
3647+
bufferToSign: Buffer.from(messageEncoded, 'hex'),
36413648
});
36423649
assert(signedMessageRequest.messages, 'Unable to find messages in signedMessageRequest');
36433650
assert(
@@ -3649,8 +3656,8 @@ export class Wallet implements IWallet {
36493656
coin: this.coin(),
36503657
txHash: signedMessageRequest.messages[0].txHash,
36513658
signature: signedMessageRequest.messages[0].txHash,
3652-
messageRaw: params.message?.messageRaw,
3653-
messageEncoded: params.message?.messageEncoded,
3659+
messageRaw,
3660+
messageEncoded,
36543661
txRequestId: signedMessageRequest.txRequestId,
36553662
};
36563663
} catch (e) {

0 commit comments

Comments
 (0)