🔬
Ethscriptions
Ethscriptions Docs
Ethscriptions Docs
  • 👋Overview
    • Introducing Ethscriptions
    • Quick Start
    • Protocol Specification
  • 💡ESIPs
    • What are ESIPs?
    • Accepted ESIPs
      • ESIP-1: Smart Contract Ethscription Transfers
      • ESIP-2: Safe Trustless Smart Contract Ethscription Escrow
      • ESIP-3: Smart Contract Ethscription Creations
      • ESIP-5: Bulk Ethscription Transfers from EOAs
      • ESIP-6: Opt-in Ethscription Non-uniqueness
      • ESIP-7: Support Gzipped Calldata in Ethscription Creation
      • ESIP-8: Ethscription Attachments aka "BlobScriptions"
    • Draft ESIPs
      • ESIP-XX: Extending Ethscriptions to L2 Networks
      • DEPRECATED: ESIP-4: The Ethscriptions Virtual Machine
  • ⚙️API Docs
    • API Overview
  • 😍Community Projects
    • Floored Ape Ethscribe
    • Ethscriber.xyz
Powered by GitBook
On this page
  1. ESIPs
  2. Accepted ESIPs

ESIP-1: Smart Contract Ethscription Transfers

This ESIP is LIVE

Version History

  • June 29: Changed event name to be more explicit and to reduce changes of collision.

  • June 29: Added spec for case in which there are multiple transfers in a given transaction.

Specification

Incorporate one new smart contract event into the Ethscriptions Protocol:

ethscriptions_protocol_TransferEthscription(
  address indexed recipient,
  bytes32 indexed ethscriptionId
)

Event signature:

// "0xf30861289185032f511ff94a8127e470f3d0e6230be4925cb6fad33f3436dffb"
keccak256("ethscriptions_protocol_TransferEthscription(address,bytes32)")

When a contract emits ethscriptions_protocol_TransferEthscription, the protocol should register a valid ethscription transfer from the emitting contract to recipient of the ethscription with id ethscriptionId, provided the emitting contract owns that ethscription when emitting the event, and the event is emitted in 17672762 or a later block.

If there are multiple valid events they should be processed in the order of their log index.

If the input data of the transaction also represents a valid transfer, this transfer will be processed before all event-based transfers.

Rationale

Ethscriptions can be transferred to any address, which means smart contracts can own them. However, smart contracts cannot currently transfer or create ethscriptions themselves.

This inhibits the creation of protocol-native apps that require smart contracts, such as marketplaces. Further, it makes the protocol difficult to use for smart contract wallet users.

This proposal lays out a simple and low gas mechanism for enabling smart contracts to transfer ethscriptions, with ethscription creation to follow soon.

Indexing these events across all contracts increases the burden of operating an indexer, but this extra cost is incremental given that indexers must inspect the calldata of every transaction anyway.

Notes

A previous version of this proposal included an additional smart contract event for Ethscription creation:

CreateEthscription(
  address indexed initialOwner,
  string dataURI
)

However I think the need for this event is smaller and will consider it in a different proposal so as to maintain as much simplicity as possible and being as deliberate as possible in making changes

PreviousAccepted ESIPsNextESIP-2: Safe Trustless Smart Contract Ethscription Escrow

Last updated 1 year ago

💡