Skip to content

Commit a797a05

Browse files
author
Grégory Saive
authored
Merge branch 'master' into fix/accountRepository
2 parents 70947d6 + e67daa2 commit a797a05

File tree

4 files changed

+79
-6
lines changed

4 files changed

+79
-6
lines changed

e2e/infrastructure/Listener.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,4 +154,16 @@ describe('Listener', () => {
154154
TransactionUtils.createAndAnnounceWithInsufficientBalance();
155155
}, 1000);
156156
});
157+
158+
it('multisigAccountAdded', (done) => {
159+
listener.multisigAccountAdded(account.address)
160+
.toPromise()
161+
.then((res) => {
162+
done();
163+
});
164+
165+
setTimeout(() => {
166+
TransactionUtils.createModifyMultisigAccountTransaction(account);
167+
}, 1000);
168+
});
157169
});

e2e/infrastructure/TransactionUtils.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@ import {ChronoUnit} from 'js-joda';
1717
import {TransactionHttp} from '../../src/infrastructure/TransactionHttp';
1818
import {Account} from '../../src/model/account/Account';
1919
import {Address} from '../../src/model/account/Address';
20+
import { PublicAccount } from '../../src/model/account/PublicAccount';
2021
import {NetworkType} from '../../src/model/blockchain/NetworkType';
2122
import {NetworkCurrencyMosaic} from '../../src/model/mosaic/NetworkCurrencyMosaic';
2223
import {AggregateTransaction} from '../../src/model/transaction/AggregateTransaction';
2324
import {CosignatureTransaction} from '../../src/model/transaction/CosignatureTransaction';
2425
import {Deadline} from '../../src/model/transaction/Deadline';
26+
import { ModifyMultisigAccountTransaction } from '../../src/model/transaction/ModifyMultisigAccountTransaction';
27+
import { MultisigCosignatoryModification } from '../../src/model/transaction/MultisigCosignatoryModification';
28+
import { MultisigCosignatoryModificationType } from '../../src/model/transaction/MultisigCosignatoryModificationType';
2529
import {PlainMessage} from '../../src/model/transaction/PlainMessage';
2630
import {TransferTransaction} from '../../src/model/transaction/TransferTransaction';
2731
import {CosignatoryAccount, MultisigAccount, NIS2_URL, TestingAccount} from '../../test/conf/conf.spec';
@@ -82,4 +86,20 @@ export class TransactionUtils {
8286
const cosignatureSignedTransaction = account.signCosignatureTransaction(cosignatureTransaction);
8387
transactionHttp.announceAggregateBondedCosignature(cosignatureSignedTransaction);
8488
}
89+
90+
public static createModifyMultisigAccountTransaction( account: Account,
91+
transactionHttp: TransactionHttp = new TransactionHttp(NIS2_URL)) {
92+
const modifyMultisig = ModifyMultisigAccountTransaction.create(
93+
Deadline.create(),
94+
2,
95+
1,
96+
[new MultisigCosignatoryModification(
97+
MultisigCosignatoryModificationType.Add,
98+
PublicAccount.createFromPublicKey(account.publicKey, NetworkType.MIJIN_TEST),
99+
)],
100+
NetworkType.MIJIN_TEST,
101+
);
102+
const signedTransaction = account.sign(modifyMultisig);
103+
transactionHttp.announce(signedTransaction);
104+
}
85105
}

src/infrastructure/Listener.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ import {AggregateTransactionCosignature} from '../model/transaction/AggregateTra
2626
import {CosignatureSignedTransaction} from '../model/transaction/CosignatureSignedTransaction';
2727
import {Deadline} from '../model/transaction/Deadline';
2828
import {InnerTransaction} from '../model/transaction/InnerTransaction';
29+
import {ModifyMultisigAccountTransaction} from '../model/transaction/ModifyMultisigAccountTransaction';
30+
import {MultisigCosignatoryModification} from '../model/transaction/MultisigCosignatoryModification';
31+
import {MultisigCosignatoryModificationType} from '../model/transaction/MultisigCosignatoryModificationType';
2932
import {Transaction} from '../model/transaction/Transaction';
3033
import {TransactionStatusError} from '../model/transaction/TransactionStatusError';
3134
import {TransferTransaction} from '../model/transaction/TransferTransaction';
@@ -40,6 +43,7 @@ enum ListenerChannelName {
4043
aggregateBondedAdded = 'partialAdded',
4144
aggregateBondedRemoved = 'partialRemoved',
4245
cosignature = 'cosignature',
46+
modifyMultisigAccount = 'modifyMultisigAccount',
4347
status = 'status',
4448
}
4549

@@ -288,6 +292,24 @@ export class Listener {
288292
map((_) => _.message as string));
289293
}
290294

295+
/**
296+
* Return an observable of {@link ModifyMultisigAccountTransaction} for specific address which has been added to multi signatories.
297+
* Each time an modify multi signatures transaction is announced,
298+
* it emits a new {@link ModifyMultisigAccountTransaction} in the event stream.
299+
*
300+
* @param address address we listen when a transaction with missing signatures state
301+
* @return an observable stream of ModifyMultisigAccountTransaction with missing signatures state
302+
*/
303+
public multisigAccountAdded(address: Address): Observable<ModifyMultisigAccountTransaction> {
304+
this.subscribeTo(`modifyMultisigAccount/${address.plain()}`);
305+
return this.messageSubject.asObservable().pipe(
306+
filter((_) => _.channelName === ListenerChannelName.modifyMultisigAccount),
307+
filter((_) => _.message instanceof ModifyMultisigAccountTransaction),
308+
map((_) => _.message as ModifyMultisigAccountTransaction),
309+
filter((_) => this.accountAddedToMultiSig(_, address)),
310+
);
311+
}
312+
291313
/**
292314
* Returns an observable stream of {@link TransactionStatusError} for specific address.
293315
* Each time a transaction contains an error,
@@ -388,4 +410,23 @@ export class Listener {
388410
&& (transaction.recipient as Address).equals(address)
389411
);
390412
}
413+
414+
/**
415+
* @internal
416+
* Filters if an account has been added to multi signatories
417+
* @param transaction - Transaction object
418+
* @param address - Address
419+
* @returns boolean
420+
*/
421+
// tslint:disable-next-line:adjacent-overload-signatures
422+
private accountAddedToMultiSig(transaction: Transaction, address: Address): boolean {
423+
if (transaction instanceof ModifyMultisigAccountTransaction) {
424+
transaction.modifications.map((_: MultisigCosignatoryModification) => {
425+
if (_.type === MultisigCosignatoryModificationType.Add && _.cosignatoryPublicAccount.address.equals(address)) {
426+
return true;
427+
}
428+
});
429+
}
430+
return false;
431+
}
391432
}

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,9 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
240240
extractTransactionVersion(transactionDTO.version),
241241
Deadline.createFromDTO(transactionDTO.deadline),
242242
new UInt64(transactionDTO.fee || [0, 0]),
243-
transactionDTO.actionType,
244-
transactionDTO.namespaceId,
245-
transactionDTO.mosaicId,
243+
transactionDTO.aliasAction,
244+
new NamespaceId(transactionDTO.namespaceId),
245+
new MosaicId(transactionDTO.mosaicId),
246246
transactionDTO.signature,
247247
PublicAccount.createFromPublicKey(transactionDTO.signer, extractNetworkType(transactionDTO.version)),
248248
transactionInfo,
@@ -253,9 +253,9 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
253253
extractTransactionVersion(transactionDTO.version),
254254
Deadline.createFromDTO(transactionDTO.deadline),
255255
new UInt64(transactionDTO.fee || [0, 0]),
256-
transactionDTO.actionType,
257-
transactionDTO.namespaceId,
258-
transactionDTO.address,
256+
transactionDTO.aliasAction,
257+
new NamespaceId(transactionDTO.namespaceId),
258+
extractRecipient(transactionDTO.address) as Address,
259259
transactionDTO.signature,
260260
PublicAccount.createFromPublicKey(transactionDTO.signer, extractNetworkType(transactionDTO.version)),
261261
transactionInfo,

0 commit comments

Comments
 (0)