I’m developing a service backed by Symbol, for which I want to setup a user’s accounts. The Symbol accounts are setup by the service, and so the service has access to the private keys of the accounts at the time of the setup. The accounts involved are:
-
SD_msigAccount
is the account that needs to be converted to a multisig account to be used by the user -
SD_cosign1Account
andSD_cosign2Account
are the user-controlled accounts to be configured as cosignatories -
serviceAccount
andserviceCosignAccount
are accounts used by the service provider, and will also be set as cosignatories.
The service can operate correctly without any XYMs in the users accounts. So I would like to convert the user’s account SD_msigAccount
to multisig and pay the fees from the serviceAccount
.
I’m trying implementing it this way:
- make
SD_msigAccount
sign theMultisigAccountModificationTransaction
- create the hashlock transaction with the
serviceAccount
as shown below, but this still requires theSD_msigAccount
to pay transaction fees.
Is what I’m trying to achieve possible? If yes how?
const multisigAccountModificationTransaction = MultisigAccountModificationTransaction.create(
Deadline.create(epochAdjustment),
3, // minApprovalDelta
3, // minRemovalDelta
[SD_cosign1Account.address,
SD_cosign2Account.address,·
serviceCosignAccount.address,·
serviceAccount.address], // address additions
[], // address deletions
networkType,
);
const aggregateTransaction = AggregateTransaction.createBonded(
Deadline.create(epochAdjustment),
[multisigAccountModificationTransaction.toAggregate(SD_msigAccount.publicAccount)],
networkType,
[], // cosignatures
UInt64.fromUint(2000000), //maxFee
);
const signedTransaction = SD_msigAccount.sign(
aggregateTransaction,
networkGenerationHash,
);
// lock 10 xym as spam prevention
const signedHashLockTransaction = await createSignedHashLockTx(signedTransaction,serviceAccount)