diff --git a/ARCs/arc-0077.md b/ARCs/arc-0077.md new file mode 100644 index 000000000..08aa762da --- /dev/null +++ b/ARCs/arc-0077.md @@ -0,0 +1,111 @@ +--- +arc: 77 +title: Smart Contract Consensual Soulbound Tokens +description: Interface for Application NFTs with immutable ownership and immutable burn authorization +author: Stephane BARROSO (@SudoWeezy) +discussions-to: https://github.com/algorandfoundation/ARCs/issues/242 +status: Draft +type: Standards Track +category: Interface +created: 2023-09-08 +requires: 72 +--- + +# Algorand Smart Contract Soul Bound Application NFT Specification + +## Abstract + +This ARC defines an interface extending [ARC-72](arc-0072.md) to create soulbound tokens. Before issuance, both parties (the issuer and the receiver) must agree on who has the authorization to burn this token. Burn authorization is immutable after declaration. After its issuance, a soulbound token cannot be transferred but can be burned based on a predetermined immutable burn authorization. + +## Motivation + +This ARC envisions soulbound tokens as specialized Smart Contract NFTs that will play the roles of credentials, credit records, loan histories, memberships, and many more. To provide flexibility in these scenarios, soulbound tokens must have an application-specific burn authorization and a way to distinguish themselves from regular ARC-72 tokens. + +## 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. + +### Core Token specification + +A smart contract token that is compliant with this standard MUST implement the following interface: + +```json +{ + "name": "ARC-77", + "desc": "Smart Contract Token Base Interface", + "methods": [ + { + "name": "arc77_burnAuth", + "desc": "provides burn authorization of the token id", + "readonly": true, + "args": [ + { + "type": "uint256", + "name": "tokenId", + "desc": "The identifier for a token" + } + ], + "returns": { "type": "address", "desc": "BurnAuth" } + } + ], + "events": [ + { + "name": "arc77_Issued", + "desc": "Emitted when a soulbound token is issued.", + "args": [ + { + "type": "address", + "name": "from", + "desc": "The source of transfer of tokens" + }, + { + "type": "address", + "name": "to", + "desc": "The destination of transfer of tokens" + }, + { + "type": "uint256", + "name": "tokenId", + "desc": "The id of the issued token" + }, + { + "type": "address", + "name": "burnAuth", + "desc": "Burn authorization Address of the token" + } + ] + } + ] +} +``` + +On issuing, an `arc77_Issued` event will be emitted alongside `arc72_Transfer` event. This design will give clear signals to thrid-parties that this is a soulBound token issuance event. + +All methods in this standard that are marked as `readonly` MUST be read-only as defined by [ARC-22](./arc-0022.md). + +## Rationale + +This specification is based on ERC-5484. + +### Soulbound Token (SBTs) as an extension to ARC-72 +Soulbound token serves as a specialized subset of the existing ARC-72 tokens. Service providers can treat SBTs like ARC-72's NFTs. + +### Transferability + +The burnAuth method allows third parties to check before calling transfer. + +### Core Specification + +The core specification is identical to ARC-72. + +## Backwards Compatibility + +This proposal is fully backward compatible with ARC-72. + +## Security Considerations + +There are no security considerations related directly to the implementation of this standard. + +## Copyright + +Copyright and related rights waived via CCO.