Removing a signer from a multisig account — Symbol Documentation (2024)

This guide will show you how to remove a cosignatory from a multisig account.

Prerequisites

Method #01: Using the Desktop Wallet

  1. Log in to one of the cosignatory accounts of the multisig account.

  2. Click on “Multisig” on the left-side menu.

  3. Select the multisig account in the dropdown menu.

  4. Find the cosignatory address that you want to remove in the cosignatories listed. Click the trash icon - this should highlight the account you want to remove. Then click “Send”. Review the information in the popup and enter your wallet password. Finally, click “Confirm”.

Removing a signer from a multisig account — Symbol Documentation (1)

  1. If the multisig account has the “minimum approval” set to a number greater than 1, log in to another cosignatory account and cosign the transaction. Repeat this step until the minimum approval number is satisfied.

Removing a signer from a multisig account — Symbol Documentation (2)

  1. You can check that the signer has been removed by going back to the “multisig” page.

Removing a signer from a multisig account — Symbol Documentation (3)

Method #02: Using the SDK

The following code shows how to remove a cosignatory from a 2-of-3 multisig account with minRemoval set to 1.

// replace with network typeconst networkType = NetworkType.TEST_NET;// replace with multisig public keyconst multisigAccountPublicKey = '3A537D5A1AF51158C42F80A199BB58351DBF3253C4A6A1B7BD1014682FB595EA';const multisigAccount = PublicAccount.createFromPublicKey( multisigAccountPublicKey, networkType,);// replace with cosignatory public keyconst cosignatoryToRemovePublicKey = '17E42BDF5B7FF5001DC96A262A1141FFBE3F09A3A45DE7C095AAEA14F45C0DA0';const cosignatoryToRemove = PublicAccount.createFromPublicKey( cosignatoryToRemovePublicKey, networkType,);// replace with cosignatory private keyconst cosignatoryPrivateKey = '1111111111111111111111111111111111111111111111111111111111111111';const cosignatoryAccount = Account.createFromPrivateKey( cosignatoryPrivateKey, networkType,);const multisigAccountModificationTransaction = MultisigAccountModificationTransaction.create( Deadline.create(epochAdjustment), 0, 0, [], [cosignatoryToRemove.address], networkType,);const aggregateTransaction = AggregateTransaction.createComplete( Deadline.create(epochAdjustment), [multisigAccountModificationTransaction.toAggregate(multisigAccount)], networkType, [], UInt64.fromUint(2000000),);// replace with meta.networkGenerationHash (nodeUrl + '/node/info')const networkGenerationHash = '1DFB2FAA9E7F054168B0C5FCB84F4DEB62CC2B4D317D861F3168D161F54EA78B';const signedTransaction = cosignatoryAccount.sign( aggregateTransaction, networkGenerationHash,);// replace with node endpointconst nodeUrl = 'NODE_URL';const repositoryFactory = new RepositoryFactoryHttp(nodeUrl);const transactionHttp = repositoryFactory.createTransactionRepository();transactionHttp.announce(signedTransaction).subscribe( (x) => console.log(x), (err) => console.error(err),);
// replace with network typeconst networkType = symbol_sdk_1.NetworkType.TEST_NET;// replace with multisig public keyconst multisigAccountPublicKey = '3A537D5A1AF51158C42F80A199BB58351DBF3253C4A6A1B7BD1014682FB595EA';const multisigAccount = symbol_sdk_1.PublicAccount.createFromPublicKey( multisigAccountPublicKey, networkType,);// replace with cosignatory public keyconst cosignatoryToRemovePublicKey = '17E42BDF5B7FF5001DC96A262A1141FFBE3F09A3A45DE7C095AAEA14F45C0DA0';const cosignatoryToRemove = symbol_sdk_1.PublicAccount.createFromPublicKey( cosignatoryToRemovePublicKey, networkType,);// replace with cosignatory private keyconst cosignatoryPrivateKey = '1111111111111111111111111111111111111111111111111111111111111111';const cosignatoryAccount = symbol_sdk_1.Account.createFromPrivateKey( cosignatoryPrivateKey, networkType,);const multisigAccountModificationTransaction = symbol_sdk_1.MultisigAccountModificationTransaction.create( symbol_sdk_1.Deadline.create(epochAdjustment), 0, 0, [], [cosignatoryToRemove.address], networkType,);const aggregateTransaction = symbol_sdk_1.AggregateTransaction.createComplete( symbol_sdk_1.Deadline.create(epochAdjustment), [multisigAccountModificationTransaction.toAggregate(multisigAccount)], networkType, [], symbol_sdk_1.UInt64.fromUint(2000000),);// replace with meta.networkGenerationHash (nodeUrl + '/node/info')const networkGenerationHash = '1DFB2FAA9E7F054168B0C5FCB84F4DEB62CC2B4D317D861F3168D161F54EA78B';const signedTransaction = cosignatoryAccount.sign( aggregateTransaction, networkGenerationHash,);// replace with node endpointconst nodeUrl = 'NODE_URL';const repositoryFactory = new symbol_sdk_1.RepositoryFactoryHttp(nodeUrl);const transactionHttp = repositoryFactory.createTransactionRepository();transactionHttp.announce(signedTransaction).subscribe( (x) => console.log(x), (err) => console.error(err),);

The minRemoval property indicates the number of required signatures to delete an account from the multisig. This value can be increased or decreased in the same way as the minApproval property is modified.

This time, the MultisigModificationTransaction is wrapped in an AggregateCompleteTransaction because just one account is required to delete others from the multisig.

Note

If more than one cosignature is required to announce the transaction (e.g., minRemoval is set to 2), the transaction must be defined as aggregate bonded, and all other required multisig participants should cosign it in order to be confirmed. Follow the next guide to announce aggregate bonded transactions involving a multisig account.

Follow the next guide to create a multi-level multisig account.

Removing a signer from a multisig account — Symbol Documentation (2024)
Top Articles
10 of the Highest Stock Prices in History
Passive Income: How to Earn $178.53 per Month in Your TFSA Portfolio
Navicent Human Resources Phone Number
Victor Spizzirri Linkedin
Skyward Houston County
My E Chart Elliot
His Lost Lycan Luna Chapter 5
Boomerang Media Group: Quality Media Solutions
Pj Ferry Schedule
Lycoming County Docket Sheets
Mikayla Campinos Videos: A Deep Dive Into The Rising Star
Lost Pizza Nutrition
Camstreams Download
Obituary Times Herald Record
12 Best Craigslist Apps for Android and iOS (2024)
W303 Tarkov
Nioh 2: Divine Gear [Hands-on Experience]
Michaels W2 Online
The Witcher 3 Wild Hunt: Map of important locations M19
Alejos Hut Henderson Tx
Farmer's Almanac 2 Month Free Forecast
Beverage Lyons Funeral Home Obituaries
Why do rebates take so long to process?
Craigslist Roseburg Oregon Free Stuff
پنل کاربری سایت همسریابی هلو
Bay Area Craigslist Cars For Sale By Owner
Craigslist Ludington Michigan
Catchvideo Chrome Extension
R Baldurs Gate 3
APUSH Unit 6 Practice DBQ Prompt Answers & Feedback | AP US History Class Notes | Fiveable
The Hoplite Revolution and the Rise of the Polis
Tendermeetup Login
Prima Healthcare Columbiana Ohio
John F Slater Funeral Home Brentwood
To Give A Guarantee Promise Figgerits
Msnl Seeds
19 Best Seafood Restaurants in San Antonio - The Texas Tasty
Duff Tuff
Discover Wisconsin Season 16
2700 Yen To Usd
Tyler Perry Marriage Counselor Play 123Movies
Pa Legion Baseball
Www Craigslist Com Atlanta Ga
Holzer Athena Portal
2294141287
40X100 Barndominium Floor Plans With Shop
Paradise leaked: An analysis of offshore data leaks
Missed Connections Dayton Ohio
Strange World Showtimes Near Atlas Cinemas Great Lakes Stadium 16
Prologistix Ein Number
Emmi-Sellers
Latest Posts
Article information

Author: Duane Harber

Last Updated:

Views: 6818

Rating: 4 / 5 (71 voted)

Reviews: 86% of readers found this page helpful

Author information

Name: Duane Harber

Birthday: 1999-10-17

Address: Apt. 404 9899 Magnolia Roads, Port Royceville, ID 78186

Phone: +186911129794335

Job: Human Hospitality Planner

Hobby: Listening to music, Orienteering, Knapping, Dance, Mountain biking, Fishing, Pottery

Introduction: My name is Duane Harber, I am a modern, clever, handsome, fair, agreeable, inexpensive, beautiful person who loves writing and wants to share my knowledge and understanding with you.