11import { BaseKey , BaseTransaction , InvalidTransactionError , TransactionType } from '@bitgo/sdk-core' ;
22import { BaseCoin as CoinConfig } from '@bitgo/statics' ;
3- import { PreparedParty , WalletInitTxData } from '../iface' ;
3+ import {
4+ MultiHashSignature ,
5+ OnboardingTransaction ,
6+ PreparedParty ,
7+ WalletInitBroadcastData ,
8+ WalletInitTxData ,
9+ } from '../iface' ;
10+ import { SIGNATURE_ALGORITHM_SPEC , SIGNATURE_FORMAT } from '../constant' ;
411
512export class WalletInitTransaction extends BaseTransaction {
613 private _preparedParty : PreparedParty ;
@@ -31,7 +38,29 @@ export class WalletInitTransaction extends BaseTransaction {
3138 if ( ! this . _preparedParty ) {
3239 throw new InvalidTransactionError ( 'Empty transaction data' ) ;
3340 }
34- return Buffer . from ( JSON . stringify ( this . _preparedParty ) ) . toString ( 'base64' ) ;
41+ const multiHashSignatures : MultiHashSignature [ ] = [ ] ;
42+ if ( this . signature . length > 0 ) {
43+ this . signature . map ( ( signature ) => {
44+ const multiHashSignature : MultiHashSignature = {
45+ format : SIGNATURE_FORMAT ,
46+ signature : signature ,
47+ signedBy : this . _preparedParty . publicKeyFingerprint ,
48+ signingAlgorithmSpec : SIGNATURE_ALGORITHM_SPEC ,
49+ } ;
50+ multiHashSignatures . push ( multiHashSignature ) ;
51+ } ) ;
52+ }
53+ const walletInitBroadcastData : WalletInitBroadcastData = {
54+ preparedParty : this . _preparedParty ,
55+ onboardingTransactions : this . _preparedParty . topologyTransactions . map ( ( txn ) => {
56+ const onboardingTransaction : OnboardingTransaction = {
57+ transaction : txn ,
58+ } ;
59+ return onboardingTransaction ;
60+ } ) ,
61+ multiHashSignatures : multiHashSignatures ,
62+ } ;
63+ return Buffer . from ( JSON . stringify ( walletInitBroadcastData ) ) . toString ( 'base64' ) ;
3564 }
3665
3766 toJson ( ) : WalletInitTxData {
@@ -55,10 +84,15 @@ export class WalletInitTransaction extends BaseTransaction {
5584
5685 fromRawTransaction ( rawTx : string ) : void {
5786 try {
58- const decoded : PreparedParty = JSON . parse ( Buffer . from ( rawTx , 'base64' ) . toString ( 'utf8' ) ) ;
59- this . _preparedParty = decoded ;
87+ const decoded : WalletInitBroadcastData = JSON . parse ( Buffer . from ( rawTx , 'base64' ) . toString ( 'utf8' ) ) ;
88+ this . _preparedParty = decoded . preparedParty ;
6089 this . _type = TransactionType . WalletInitialization ;
61- this . _id = decoded . multiHash ;
90+ this . _id = decoded . preparedParty . multiHash ;
91+ if ( decoded . multiHashSignatures . length > 0 ) {
92+ decoded . multiHashSignatures . map ( ( multiHashSignature : MultiHashSignature ) => {
93+ this . signatures = multiHashSignature . signature ;
94+ } ) ;
95+ }
6296 } catch ( e ) {
6397 throw new InvalidTransactionError ( 'Unable to parse raw transaction data' ) ;
6498 }
0 commit comments