From 59288fb681741ca4a8573307c98b5e5a1603dd5d Mon Sep 17 00:00:00 2001 From: nullun Date: Mon, 23 Oct 2023 14:33:30 +0100 Subject: [PATCH 1/7] initial draft of on-chain msig app --- ARCs/arc-onchain-multisig-management.md | 155 ++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 ARCs/arc-onchain-multisig-management.md diff --git a/ARCs/arc-onchain-multisig-management.md b/ARCs/arc-onchain-multisig-management.md new file mode 100644 index 000000000..af002848e --- /dev/null +++ b/ARCs/arc-onchain-multisig-management.md @@ -0,0 +1,155 @@ +--- +arc: +title: On-Chain Multisignature Management, Transaction Distribution, and Signing Workflow +description: A smart contract that stores transactions and signatures for simplified multisignature use. +author: Steve Ferrigno (@nullun) +discussion-to: +status: Draft +type: Standards Track +category: Interface +created: 2023-10-16 +requires: 4 +--- + +## Abstract + +This ARC proposes the utilization of on-chain smart contracts to facilitate the storage and transfer of multisignature metadata, transactions, and corresponding signatures for the respective multisignature sub-accounts on the Algorand blockchain. + +## Motivation + +Multisignature (multisig) accounts play a crucial role in enhancing security and control within the Algorand ecosystem. However, the management of multisig accounts often involves intricate off-chain coordination and the distribution of transactions among authorized signers. There exists a pressing need for a more streamlined and simplified approach to multisig utilization, along with an efficient transaction signing workflow. + +## Specification + +The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in RFC-2119. + +### ABI + +A compliant smart contract, conforming to this ARC, **MUST** implement the following interface: + +```json +{ + "name": "ARC-XXXX", + "desc": "On-Chain Msig Util", + "methods": [ + { + "name": "deploy", + "desc": "Deploy a new On-Chain Msig Signer Application", + "args": [], + "returns": { "type": "uint64", "desc": "Msig Util Application ID" } + }, + { + "name": "setSignatures", + "desc": "Set signatures for account. Signatures must be included as an array of byte-arrays", + "args": [ + { "type": "byte[][]", "name": "Signatures", "desc": "Array of signatures" } + ], + "returns": { "type": "void" } + }, + { + "name": "clearSignatures", + "desc": "Clear signatures for account. Be aware this only removes it from your local state, and indexers will still know and could use your signatures", + "args": [], + "returns": { "type": "void" } + }, + { + "name": "addAccount", + "desc": "Add account to multisig", + "args": [ + { "type": "uint8", "name": "Account Index", "desc": "Account position within multisig" }, + { "type": "account", "name": "Account", "desc": "Account to add" } + ], + "returns": { "type": "void" } + }, + { + "name": "removeAccount", + "desc": "Remove account from multisig", + "args": [ + { "type": "uint8", "name": "Account Index", "desc": "Account position within multisig to remove" } + ], + "returns": { "type": "void" } + }, + { + "name": "addTransaction", + "desc": "Add transaction to the app. Only one transaction should be included per call", + "args": [ + { "type": "uint8", "name": "Group Index", "desc": "Transactions position within an atomic group" }, + { "type": "byte[]", "name": "Transaction", "desc": "Transaction to add" } + ], + "returns": { "type": "void" } + }, + { + "name": "removeTransaction", + "desc": "Remove transaction from the app. Unlike signatures which will remove all previous signatures when a new one is added, you must clear all previously transactions if you want to reuse the same app", + "args": [ + { "type": "uint8", "name": "Group Index", "desc": "Transactions position within an atomic group" } + ], + "returns": { "type": "void" } + }, + { + "name": "setThreshold", + "desc": "Update the multisig threshold", + "args": [ + { "type": "uint8", "name": "Threshold", "desc": "New multisignature threshold" } + ], + "returns": { "type": "void" } + }, + { + "name": "destroy", + "desc": "Destroy the application and return funds to creator address. All transactions must be removed before calling destroy", + "args": [], + "returns": { "type": "void" } + } + ] +} +``` + +Each deployment is administered by the creator's address, who is responsible for configuring the multisignature metadata, which includes the threshold and sub-accounts, and adding or removing transactions. After successful deployment and configuration, the application ID should be distributed among the involved parties as a one-time off-chain exchange. + +Each constituent of an on-chain multisignature application **SHOULD** OptIn to the application ID. This OptIn serves two primary purposes: it allocates the minimum balance requirement for storing up to 16 signatures in their local state, and it enables any local infrastructure, such as wallets, to track changes in the application's state and notify the user of any new transactions requiring their signature. + +Once a transaction receives enough signatures to meet the threshold and falls within the valid rounds, a party member may construct the multisignature transaction, including all the signatures, and submit it to the network. Subsequently, participants can clear the signatures from their local state, and the administrator can remove or replace the transactions. + +When an on-chain multisig application is no longer needed, the administrator may destroy the application, reclaiming any Algo funds used for storing the transactions in boxes. Destroying the application does not render the multisignature account inaccessible, as a new deployment with the same multisignature metadata can be configured and used. + +### Storage + +| Type | Key | Value | Description | +|--------|-------------|---------|----------------------------------------------------------| +| Global | "Threshold" | uint64 | The multisig threshold | +| Global | uint8 | Account | The sub-account index for the multisig | +| Global | Account | uint64 | The number of times this account appears in the multisig | +| Local | uint8 | byte[] | The signature for the nth-indexed transaction | +| Box | "txn"+i | byte[] | The transactions available for signing "txn0", "txn1"... | + +### Cost + +Given that all interactions occur on-chain, there are associated costs, excluding the standard transaction fee. Below is an approximate breakdown of the minimum additional costs: + +| Action | Storage Cost (microAlgos) | Breakdown | +|-----------------|--------------------------|---------------------------------------------------| +| Creation | 250,000+ | 100,000 + (50,000 * (1 + (2 * NumOfSubAccounts))) | +| OptIn | 900,000 | 100,000 + (25,000 + 25,000) * 16 | +| Add Transaction | 72,100+ | 2,500 + (400 * (4 + TxnSize)) * NumOfTxns | + +## Limitations and Design Decisions + +The current design necessitates that all transactions within the group be exclusively signed by the constituents of the multisig account. If a group transaction requires a separate signature from another account or a logicsig, this design does not support it. An extension to this ARC should be considered to address such scenarios. + +This ARC inherently promotes transparency of transactions and signers. If an additional layer of anonymity is required, an extension to this ARC should be proposed, outlining how to store and share encrypted data. + +Having individual deployments for different groups rather than a single instance that everyone uses has benefits for third-party infrastructure. Managing a large number of boxes for a single application can be cumbersome. Instead, small groups can create their multisig app by having one member deploy the contract. They can then subscribe to the application ID, simplifying the tracking of multisig applications and transactions for wallets and other infrastructure. + +## Reference Implementation + +A reference implementation is available at [github.com/nullun/MsigShare](https://github.com/nullun/MsigShare) with a user interface at [github.com/nullun/MsigShareUI](https://github.com/nullun/MsigShareUI). Although the code was originally written in TEAL, it is encouraged for others to implement this standard in their prefered smart contract language of choice, provided it conforms to the ABI specification, which is the most critical aspect. + +## Security Considerations + +This ARC's design solely involves storing existing data structures and does not have the capability to create or use multisignature accounts. Therefore, the security implications are minimal. End users are expected to review each transaction before generating a signature for it. If a smart contract implementing this ARC lacks proper security checks, the worst-case scenario would involve incorrect transactions and invalid signatures being stored on-chain, along with the potential loss of the minimum balance requirement from the application account. + +## Additional Considerations + +## Copyright + +Copyright and related rights are waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). From 6e2ac210f10320a0fee2df52c43fa603a0b01c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane?= Date: Tue, 24 Oct 2023 10:58:42 +0200 Subject: [PATCH 2/7] Fix lint & assign number --- ...nchain-multisig-management.md => arc-0055.md} | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) rename ARCs/{arc-onchain-multisig-management.md => arc-0055.md} (91%) diff --git a/ARCs/arc-onchain-multisig-management.md b/ARCs/arc-0055.md similarity index 91% rename from ARCs/arc-onchain-multisig-management.md rename to ARCs/arc-0055.md index af002848e..d77a4ac55 100644 --- a/ARCs/arc-onchain-multisig-management.md +++ b/ARCs/arc-0055.md @@ -1,9 +1,9 @@ --- -arc: -title: On-Chain Multisignature Management, Transaction Distribution, and Signing Workflow +arc: 55 +title: On-Chain storage/transfer of Msig, Txn, Sig description: A smart contract that stores transactions and signatures for simplified multisignature use. author: Steve Ferrigno (@nullun) -discussion-to: +discussions-to: https://github.com/algorandfoundation/ARCs/issues/254 status: Draft type: Standards Track category: Interface @@ -132,7 +132,8 @@ Given that all interactions occur on-chain, there are associated costs, excludin | OptIn | 900,000 | 100,000 + (25,000 + 25,000) * 16 | | Add Transaction | 72,100+ | 2,500 + (400 * (4 + TxnSize)) * NumOfTxns | -## Limitations and Design Decisions +## Rationale +### Limitations and Design Decisions The current design necessitates that all transactions within the group be exclusively signed by the constituents of the multisig account. If a group transaction requires a separate signature from another account or a logicsig, this design does not support it. An extension to this ARC should be considered to address such scenarios. @@ -142,14 +143,11 @@ Having individual deployments for different groups rather than a single instance ## Reference Implementation -A reference implementation is available at [github.com/nullun/MsigShare](https://github.com/nullun/MsigShare) with a user interface at [github.com/nullun/MsigShareUI](https://github.com/nullun/MsigShareUI). Although the code was originally written in TEAL, it is encouraged for others to implement this standard in their prefered smart contract language of choice, provided it conforms to the ABI specification, which is the most critical aspect. +A reference implementation is available at github.com/nullun/MsigShare with a user interface at github.com/nullun/MsigShareUI. Although the code was originally written in TEAL, it is encouraged for others to implement this standard in their prefered smart contract language of choice, provided it conforms to the ABI specification, which is the most critical aspect. ## Security Considerations This ARC's design solely involves storing existing data structures and does not have the capability to create or use multisignature accounts. Therefore, the security implications are minimal. End users are expected to review each transaction before generating a signature for it. If a smart contract implementing this ARC lacks proper security checks, the worst-case scenario would involve incorrect transactions and invalid signatures being stored on-chain, along with the potential loss of the minimum balance requirement from the application account. -## Additional Considerations - ## Copyright - -Copyright and related rights are waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). +Copyright and related rights waived via CCO. From 0f052f146e1d02be006c552a6b96c21032a0f75b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane?= Date: Fri, 10 Nov 2023 10:08:05 +0100 Subject: [PATCH 3/7] Replace XXXX by arc number --- ARCs/arc-0055.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ARCs/arc-0055.md b/ARCs/arc-0055.md index d77a4ac55..0dde97c0f 100644 --- a/ARCs/arc-0055.md +++ b/ARCs/arc-0055.md @@ -29,7 +29,7 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo ```json { - "name": "ARC-XXXX", + "name": "ARC-55", "desc": "On-Chain Msig Util", "methods": [ { From 586e25f4ab9de21be81eb6b1e40801f5754a84fa Mon Sep 17 00:00:00 2001 From: nullun Date: Wed, 22 Nov 2023 12:55:50 +0000 Subject: [PATCH 4/7] Update method names and fixed typo --- ARCs/arc-0055.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ARCs/arc-0055.md b/ARCs/arc-0055.md index 0dde97c0f..ed47d48d6 100644 --- a/ARCs/arc-0055.md +++ b/ARCs/arc-0055.md @@ -33,13 +33,13 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo "desc": "On-Chain Msig Util", "methods": [ { - "name": "deploy", + "name": "arc55_deploy", "desc": "Deploy a new On-Chain Msig Signer Application", "args": [], "returns": { "type": "uint64", "desc": "Msig Util Application ID" } }, { - "name": "setSignatures", + "name": "arc55_setSignatures", "desc": "Set signatures for account. Signatures must be included as an array of byte-arrays", "args": [ { "type": "byte[][]", "name": "Signatures", "desc": "Array of signatures" } @@ -47,13 +47,13 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo "returns": { "type": "void" } }, { - "name": "clearSignatures", + "name": "arc55_clearSignatures", "desc": "Clear signatures for account. Be aware this only removes it from your local state, and indexers will still know and could use your signatures", "args": [], "returns": { "type": "void" } }, { - "name": "addAccount", + "name": "arc55_addAccount", "desc": "Add account to multisig", "args": [ { "type": "uint8", "name": "Account Index", "desc": "Account position within multisig" }, @@ -62,7 +62,7 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo "returns": { "type": "void" } }, { - "name": "removeAccount", + "name": "arc55_removeAccount", "desc": "Remove account from multisig", "args": [ { "type": "uint8", "name": "Account Index", "desc": "Account position within multisig to remove" } @@ -70,7 +70,7 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo "returns": { "type": "void" } }, { - "name": "addTransaction", + "name": "arc55_addTransaction", "desc": "Add transaction to the app. Only one transaction should be included per call", "args": [ { "type": "uint8", "name": "Group Index", "desc": "Transactions position within an atomic group" }, @@ -79,7 +79,7 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo "returns": { "type": "void" } }, { - "name": "removeTransaction", + "name": "arc55_removeTransaction", "desc": "Remove transaction from the app. Unlike signatures which will remove all previous signatures when a new one is added, you must clear all previously transactions if you want to reuse the same app", "args": [ { "type": "uint8", "name": "Group Index", "desc": "Transactions position within an atomic group" } @@ -87,7 +87,7 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo "returns": { "type": "void" } }, { - "name": "setThreshold", + "name": "arc55_setThreshold", "desc": "Update the multisig threshold", "args": [ { "type": "uint8", "name": "Threshold", "desc": "New multisignature threshold" } @@ -95,7 +95,7 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo "returns": { "type": "void" } }, { - "name": "destroy", + "name": "arc55_destroy", "desc": "Destroy the application and return funds to creator address. All transactions must be removed before calling destroy", "args": [], "returns": { "type": "void" } @@ -143,7 +143,7 @@ Having individual deployments for different groups rather than a single instance ## Reference Implementation -A reference implementation is available at github.com/nullun/MsigShare with a user interface at github.com/nullun/MsigShareUI. Although the code was originally written in TEAL, it is encouraged for others to implement this standard in their prefered smart contract language of choice, provided it conforms to the ABI specification, which is the most critical aspect. +A reference implementation is available at github.com/nullun/MsigShare with a user interface at github.com/nullun/MsigShareUI. Although the code was originally written in TEAL, it is encouraged for others to implement this standard in their preferred smart contract language of choice, provided it conforms to the ABI specification, which is the most critical aspect. ## Security Considerations From b10e47be42428a6fe70cea91cb9b6c3c2442ebfd Mon Sep 17 00:00:00 2001 From: nullun Date: Fri, 24 Nov 2023 13:30:26 +0000 Subject: [PATCH 5/7] Update to include TEALScript reference and lifecycle --- ARCs/arc-0055.md | 172 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 132 insertions(+), 40 deletions(-) diff --git a/ARCs/arc-0055.md b/ARCs/arc-0055.md index ed47d48d6..ec61ac39e 100644 --- a/ARCs/arc-0055.md +++ b/ARCs/arc-0055.md @@ -30,88 +30,180 @@ A compliant smart contract, conforming to this ARC, **MUST** implement the follo ```json { "name": "ARC-55", - "desc": "On-Chain Msig Util", + "desc": "On-Chain Msig App", "methods": [ { "name": "arc55_deploy", - "desc": "Deploy a new On-Chain Msig Signer Application", - "args": [], - "returns": { "type": "uint64", "desc": "Msig Util Application ID" } - }, - { - "name": "arc55_setSignatures", - "desc": "Set signatures for account. Signatures must be included as an array of byte-arrays", "args": [ - { "type": "byte[][]", "name": "Signatures", "desc": "Array of signatures" } + { + "name": "threshold", + "type": "uint64", + "desc": "Initial multisig threshold, must be greater than 0" + } ], - "returns": { "type": "void" } + "desc": "Deploy a new On-Chain Msig App.", + "returns": { + "type": "uint64", + "desc": "Msig App Application ID" + } }, { - "name": "arc55_clearSignatures", - "desc": "Clear signatures for account. Be aware this only removes it from your local state, and indexers will still know and could use your signatures", + "name": "arc55_update", "args": [], - "returns": { "type": "void" } + "desc": "Update the application", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "arc55_destroy", + "args": [], + "desc": "Destroy the application and return funds to creator address. All transactions must be removed before calling destroy", + "returns": { + "type": "void", + "desc": "" + } }, { "name": "arc55_addAccount", - "desc": "Add account to multisig", "args": [ - { "type": "uint8", "name": "Account Index", "desc": "Account position within multisig" }, - { "type": "account", "name": "Account", "desc": "Account to add" } + { + "name": "index", + "type": "uint8", + "desc": "Account position within multisig to add" + }, + { + "name": "account", + "type": "account", + "desc": "Account to add" + } ], - "returns": { "type": "void" } + "desc": "Add account to multisig", + "returns": { + "type": "void", + "desc": "" + } }, { "name": "arc55_removeAccount", + "args": [ + { + "name": "index", + "type": "uint8", + "desc": "Account position within multisig to remove" + } + ], "desc": "Remove account from multisig", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "arc55_setThreshold", "args": [ - { "type": "uint8", "name": "Account Index", "desc": "Account position within multisig to remove" } + { + "name": "threshold", + "type": "uint64", + "desc": "New multisig threshold, must be greater than 0" + } ], - "returns": { "type": "void" } + "desc": "Update the multisig threshold", + "returns": { + "type": "void", + "desc": "" + } }, { "name": "arc55_addTransaction", - "desc": "Add transaction to the app. Only one transaction should be included per call", "args": [ - { "type": "uint8", "name": "Group Index", "desc": "Transactions position within an atomic group" }, - { "type": "byte[]", "name": "Transaction", "desc": "Transaction to add" } + { + "name": "index", + "type": "uint8", + "desc": "Transaction position within atomic group to add" + }, + { + "name": "transaction", + "type": "byte[]", + "desc": "Transaction to add" + } ], - "returns": { "type": "void" } + "desc": "Add transaction to the app. Only one transaction should be included per call", + "returns": { + "type": "void", + "desc": "" + } }, { "name": "arc55_removeTransaction", - "desc": "Remove transaction from the app. Unlike signatures which will remove all previous signatures when a new one is added, you must clear all previously transactions if you want to reuse the same app", "args": [ - { "type": "uint8", "name": "Group Index", "desc": "Transactions position within an atomic group" } + { + "name": "index", + "type": "uint8", + "desc": "Transaction position within atomic group to remove" + } ], - "returns": { "type": "void" } + "desc": "Remove transaction from the app. Unlike signatures which will remove all previous signatures when a new one is added, you must clear all previous transactions if you want to reuse the same app", + "returns": { + "type": "void", + "desc": "" + } }, { - "name": "arc55_setThreshold", - "desc": "Update the multisig threshold", + "name": "arc55_setSignatures", "args": [ - { "type": "uint8", "name": "Threshold", "desc": "New multisignature threshold" } + { + "name": "signatures", + "type": "byte[][]", + "desc": "Array of signatures" + } ], - "returns": { "type": "void" } + "desc": "Set signatures for account. Signatures must be included as an array of byte-arrays", + "returns": { + "type": "void", + "desc": "" + } }, { - "name": "arc55_destroy", - "desc": "Destroy the application and return funds to creator address. All transactions must be removed before calling destroy", - "args": [], - "returns": { "type": "void" } + "name": "arc55_clearSignatures", + "args": [ + { + "name": "account", + "type": "account", + "desc": "Account whose signatures to clear" + } + ], + "desc": "Clear signatures for an account. Be aware this only removes it from your local state, and indexers will still know and could use your signature", + "returns": { + "type": "void", + "desc": "" + } } ] } ``` -Each deployment is administered by the creator's address, who is responsible for configuring the multisignature metadata, which includes the threshold and sub-accounts, and adding or removing transactions. After successful deployment and configuration, the application ID should be distributed among the involved parties as a one-time off-chain exchange. +Each deployment is administered by the creator's address, who is responsible for configuring the multisignature metadata, which includes the threshold and sub-accounts, and adding or removing transactions. After successful deployment and configuration, the application ID **SHOULD** be distributed among the involved parties as a one-time off-chain exchange. Each constituent of an on-chain multisignature application **SHOULD** OptIn to the application ID. This OptIn serves two primary purposes: it allocates the minimum balance requirement for storing up to 16 signatures in their local state, and it enables any local infrastructure, such as wallets, to track changes in the application's state and notify the user of any new transactions requiring their signature. -Once a transaction receives enough signatures to meet the threshold and falls within the valid rounds, a party member may construct the multisignature transaction, including all the signatures, and submit it to the network. Subsequently, participants can clear the signatures from their local state, and the administrator can remove or replace the transactions. +Once a transaction receives enough signatures to meet the threshold and falls within the valid rounds, anyone **MAY** construct the multisignature transaction, including all the signatures, and submit it to the network. Subsequently, participants can clear the signatures from their local state, and the administrator can remove or replace the transactions. When an on-chain multisig application is no longer needed, the administrator may destroy the application, reclaiming any Algo funds used for storing the transactions in boxes. Destroying the application does not render the multisignature account inaccessible, as a new deployment with the same multisignature metadata can be configured and used. +Below is a typical expected lifecycle: + + * Admin deploys Msig App, with a threshold of 2. + * Admin adds 2 accounts to form a new multisig. + * Admin adds a new transaction to sign. + * Account 1 provides their signatures. + * Account 2 provides their signatures. + * Anyone can now submit the transaction to the network. + * Admin clears the signatures of each account. + * Admin removes the transaction since it's now committed to the network. + * Admin is ready to add a new transaction. + ### Storage | Type | Key | Value | Description | @@ -124,7 +216,7 @@ When an on-chain multisig application is no longer needed, the administrator may ### Cost -Given that all interactions occur on-chain, there are associated costs, excluding the standard transaction fee. Below is an approximate breakdown of the minimum additional costs: +Given that all interactions occur on-chain, there are associated costs, excluding the standard transaction fee. Below is an approximate breakdown of the minimum additional costs going by the current costs. Note that a smart contract implementation **MUST** not hardcode any of these values and instead use the AVM's global values to calculate if payments have been met: | Action | Storage Cost (microAlgos) | Breakdown | |-----------------|--------------------------|---------------------------------------------------| @@ -135,15 +227,15 @@ Given that all interactions occur on-chain, there are associated costs, excludin ## Rationale ### Limitations and Design Decisions -The current design necessitates that all transactions within the group be exclusively signed by the constituents of the multisig account. If a group transaction requires a separate signature from another account or a logicsig, this design does not support it. An extension to this ARC should be considered to address such scenarios. +The current design necessitates that all transactions within the group be exclusively signed by the constituents of the multisig account. If a group transaction requires a separate signature from another account or a logicsig, this design does not support it. An extension to this ARC **SHOULD** be considered to address such scenarios. -This ARC inherently promotes transparency of transactions and signers. If an additional layer of anonymity is required, an extension to this ARC should be proposed, outlining how to store and share encrypted data. +This ARC inherently promotes transparency of transactions and signers. If an additional layer of anonymity is required, an extension to this ARC **SHOULD** be proposed, outlining how to store and share encrypted data. Having individual deployments for different groups rather than a single instance that everyone uses has benefits for third-party infrastructure. Managing a large number of boxes for a single application can be cumbersome. Instead, small groups can create their multisig app by having one member deploy the contract. They can then subscribe to the application ID, simplifying the tracking of multisig applications and transactions for wallets and other infrastructure. ## Reference Implementation -A reference implementation is available at github.com/nullun/MsigShare with a user interface at github.com/nullun/MsigShareUI. Although the code was originally written in TEAL, it is encouraged for others to implement this standard in their preferred smart contract language of choice, provided it conforms to the ABI specification, which is the most critical aspect. +A TEALScript reference implementation is available at github.com/nullun/arc55-msig-app or an older TEAL implementation at github.com/nullun/MsigShare with a user interface at github.com/nullun/MsigShareUI. It is encouraged for others to implement this standard in their preferred smart contract language of choice and even extend the capabilities whilst adhering to the provided ABI specification. ## Security Considerations From 14bab94388137b54a339eb95578910832b4270fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane?= Date: Fri, 24 Nov 2023 14:49:03 +0100 Subject: [PATCH 6/7] Formating --- ARCs/arc-0055.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ARCs/arc-0055.md b/ARCs/arc-0055.md index ec61ac39e..f3ac47bf0 100644 --- a/ARCs/arc-0055.md +++ b/ARCs/arc-0055.md @@ -235,7 +235,7 @@ Having individual deployments for different groups rather than a single instance ## Reference Implementation -A TEALScript reference implementation is available at github.com/nullun/arc55-msig-app or an older TEAL implementation at github.com/nullun/MsigShare with a user interface at github.com/nullun/MsigShareUI. It is encouraged for others to implement this standard in their preferred smart contract language of choice and even extend the capabilities whilst adhering to the provided ABI specification. +A TEALScript reference implementation of is available at `github.com/nullun/arc55-msig-app` or an older TEAL implementation at `github.com/nullun/MsigShare` with a user interface at `github.com/nullun/MsigShareUI`. It is encouraged for others to implement this standard in their preferred smart contract language of choice and even extend the capabilities whilst adhering to the provided ABI specification. ## Security Considerations From 11642aa235388b6d540deacf794d32497a7e0360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane?= Date: Fri, 24 Nov 2023 15:57:22 +0100 Subject: [PATCH 7/7] fix typo --- ARCs/arc-0055.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ARCs/arc-0055.md b/ARCs/arc-0055.md index f3ac47bf0..c9c769407 100644 --- a/ARCs/arc-0055.md +++ b/ARCs/arc-0055.md @@ -235,7 +235,7 @@ Having individual deployments for different groups rather than a single instance ## Reference Implementation -A TEALScript reference implementation of is available at `github.com/nullun/arc55-msig-app` or an older TEAL implementation at `github.com/nullun/MsigShare` with a user interface at `github.com/nullun/MsigShareUI`. It is encouraged for others to implement this standard in their preferred smart contract language of choice and even extend the capabilities whilst adhering to the provided ABI specification. +A TEALScript reference implementation is available at `github.com/nullun/arc55-msig-app` or an older TEAL implementation at `github.com/nullun/MsigShare` with a user interface at `github.com/nullun/MsigShareUI`. It is encouraged for others to implement this standard in their preferred smart contract language of choice and even extend the capabilities whilst adhering to the provided ABI specification. ## Security Considerations