layers: consensus, standard library
consensus: pushback
Genesis provides no information on the contract issuer. This means, contract id doesn't commit to an issuer identity.
While many forms of contracts may contain assignments with the rights usually specific to the issuer, such that a corresponding seal-defining UTXOs may be seen as kind of the issuer identity, using this approach has many drawbacks:
not all contracts have that kind of rights in genesis, for instance RGB20 non-inflatible assets do not;
an issuer may delegate these rights to a third party, thus there is no guaranteed link between the issuer and UTXO as an issuer identity.
Issuers also can sign contract consignments, however with this approach multiple alternative parties may claim the contract with different signatures, since the contract id doesn't commit to the issuer identity.
I propose to introduce into genesis the following information (and make it accessible through the standard library contract API):
issuer identity, in form of a serialized public key, with a flag indicating format of the key (PGP, SSH and BIP340 for now);
signature over genesis OpCommitment structure, which includes issuer identity
make contract id to commit to both the OpCommitment and the signature
Genesis provides no information on the contract issuer. This means, contract id doesn't commit to an issuer identity.
While many forms of contracts may contain assignments with the rights usually specific to the issuer, such that a corresponding seal-defining UTXOs may be seen as kind of the issuer identity, using this approach has many drawbacks:
Issuers also can sign contract consignments, however with this approach multiple alternative parties may claim the contract with different signatures, since the contract id doesn't commit to the issuer identity.
I propose to introduce into genesis the following information (and make it accessible through the standard library contract API):
OpCommitment
structure, which includes issuer identityOpCommitment
and the signature