---
# System prepended metadata

title: Transmutation Basic Workflow

---

Droppr Tech Design

Multi-Chain Transmutation 
- Copy an NFT from chain to our contract
- Burn an NFT to mint on another
- Each Chain would have a minting contract that can only mint a token if the token does not exist on the other chains
- A fee has to be paid on both sides
- Deep copy the history of a token at the time of transmutation
- write transmutation event on history and rehash on receipt transaction
- Each chain has a validator / coordinator 


Chain Alice
- alice creates transfer event, params(nft_id, destination+chan, destination_recipient )
- oracle would see it
- bob verifies optional
- - oracle creates a creation event with previous nft_id, meta_data_uri, origin_chain_id)
- oracle aquires creation event tx id from destination chain, creates acknowledgement event from origin chain.

nft[chain_id:nftid] = chain_id:address
nft[address or dropper null].destination = chain_id:address
nft[chain_id:nftid].transfer = diabled
nft_uri[chain_id:nftid] = /path/meta_data.json or ipfs hash


FRK Workflow Thoughts:

# Transmutation Basic Workflow

Alice wants to transfer her expanse NFT to Bobs ETH address
Alice creates a transfer(nft_id, destination_chain, destination_address) transaction
Transfer Method 
	sets nft[chain_id:nft_id].owner == 0xDRPPRVAULT
    sets nft[chain_id:nft_id].destination == destination_chain:address
Oracle waits until alices transaction reaches nConfirmsForSafety
IF confirms > nConfirmsForSafety
Oracle checks DropperVaultEth to see if nft[origin_chain:nft_id] exists
IF !exists 
    Oracle MintsNewToken(owner, origin_chain, nft_id,, uri)
    Emit Creation Event
ELSEIF exists && owner == 0xDRPPRVAULT
	Oracle nft[origin_chain_id:nft_id].owner.set(new_owner)
    Emit Set Owner Event
ELSE
    How did we get here?! Something went horribly wrong.

# Optional Steps
Bob has to verify he wants to receive transfers
Bob can let Alice know he got it

# Notes
Preserving NFT data on the origin chain but setting owner to 0xVAULT saves gas cost later if someone decides to send that nft back home.
We could call that process "reanimation"

Transfer Data
Graph Integration


## Gui Thinking
* Alice: user sends tx to transmute NFT
* Alice: TRANSMUTE_SENDING EVENT, origin_tx, destination_chain, destination_tx
* Alice: set NFT owner to 0xDROPPRVAULT
* Bob: check if NFT already exists in collection
    * If yes
        * Verify the NFT is in the vault
        * Change owner to destination
    * If no, mint new one to destination
* Bob: TRANSMUTE_RECEIVED EVENT, origin_chain, origin_tx, destination_tx



## PNG frk Walkthrough Notes:
- User on Alice Chain initiates a transmutation event to a recipient address. ([origin_chain_id:nft_id] Owner is sender)
- Token owner for trans event token is transfered to droppr burn control unit. ([origin_chain_id:nft_id] -> BurnPile_Owner)
- Transmutation Service is an api layer that encodes the dat cert none and ttl for on chain event signaling to the central control 
- central control will handle message traffic for all chains they need to validate for
- a validator can listen to multiple chains but owns responsible one for one validator per chain.
- validator sends siigned messages to central control through api 
- central control will be the only contact that talks down to the other chains.
- Pub/sub secure websocket  for central control events subscribing to their respective chain channel
- Central controll will log requests and transaction history of burn events in database for record
- Central control will check [origin_chain_id:nft_id] = BurnPile_Ownership of trans event token.
- Central controll will create a secret signature that will be required for minting at the chain layer
- respective chain will need the signature from the other chain and the secret from central control
- Upon authorization minting on new destination Bob chain will change the [origin_chain_id:nft_id] for the token to reflect new owner: recipient
- Token URI will look up data based on the [origin_chain_id:nft_id] unique pair.
- User on Bob chain checkes their token balance  [origin_chain_id:nft_id] Owner is recipient
-
- New Token State | Owned By BurnPile_Owner | Owned by Buyer >> recipient 