Skip to content

Latest commit

 

History

History
39 lines (28 loc) · 2.42 KB

cap-0030.md

File metadata and controls

39 lines (28 loc) · 2.42 KB

Preamble

CAP: 0030
Title: Remove NO_ISSUER Operation Results
Author: Siddharth Suresh
Status: Final
Created: 2020-01-14
Discussion: https://github.com/stellar/stellar-protocol/issues/497
Protocol version: 13

Simple Summary

There are operations that unnecessarily load the issuer, and return an error result if the issuer of an asset was not found. These errors are not necessary, and this proposal aims to remove them.

Motivation

The following operation results indicate that an operation failed because the issuer of an asset does not exist: PAYMENT_NO_ISSUER, PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER, PATH_PAYMENT_STRICT_SEND_NO_ISSUER, MANAGE_SELL_OFFER_SELL_NO_ISSUER, MANAGE_SELL_OFFER_BUY_NO_ISSUER, MANAGE_BUY_OFFER_SELL_NO_ISSUER, MANAGE_BUY_OFFER_BUY_NO_ISSUER, and CHANGE_TRUST_NO_ISSUER. Each of the operations that can produce these results other than ChangeTrustOp does not otherwise depend on the existence of the issuer. The issuer is only required when creating a trustline with ChangeTrustOp. Removing the issuer check from all other operations will standardize the protocol on not requiring the issuer outside of this one case.

Removing the issuer from the operations that produce the *_NO_ISSUER results will also prevent stellar-core developers from using the AUTH_REQUIRED flag incorrectly. If AUTH_REQUIRED is not set on the issuer, then the TrustLine will be authorized on it's creation. The name AUTH_REQUIRED, however, implies that the flag determines if authorization should be checked, which is not the actual logic.

This proposal will also make the CAP-0023 (Two-Part Payments) implementation simpler because we won't need to return the *_NO_ISSUER results there to maintain consistency.

Goals Alignment

The Stellar Network should facilitate simplicity and interoperability with other protocols and networks.

Specification

For every operation that can return a *_NO_ISSUER result except ChangeTrustOp, don't load the issuer or return the *_NO_ISSUER result.

Backwards Incompatibilities

The *_NO_ISSUER results will no longer be returned for the affected operations, so anyone relying on these results will need to modify their behavior. These error results aren't meaningful anyways because anyone can create the issuer account to bypass the issuer check.

Security Concerns

None

Test Cases

None yet

Implementation

stellar/stellar-core#2389