What's the Blockchain Shift?

Because the technology of blockchains is constantly evolving, and we want to enable our customers to benefit from the best performance, we have designated the Blockchain Shift.

As a brand, you may be used to minting digital passports, also known as NFT, on a given chain, however, performance has slowed. The blockchain shift allows recreating and bridging all previously created digital passports from this network to a more secure and performing new one. This means no matter the blockchain, you can mint using our protocol and our solutions. At Arianee, we make blockchain abstraction possible by managing the complexity of sublayers for you.

What's bridging?

Bridging is the operation to move a digital passport from one chain to another. The objective of this feature is to be able to bridge a digital passport without losing its history, this includes transfers and accepted Arianee Events.

โš ๏ธ

  • Messages sent to digital passports on chain1 will be lost for the owner on chain2 for the bridged digital passport. They wonโ€™t be bridged to the new chain as a message is ephemeral.
  • Pending events are not bridged.

What are the steps of bridging?

  1. NFT-chain1 is sent to 0x0000000000000000000000000000000B7269d67e (bridge address).
  2. NFT-chain1 is updated with the thread.
  3. NFT-chain2 is created with the same content and the same viewKey to allow retro compatibility.
  4. NFT-chain2 is transferred (air-dropped) to the previous digital passport owner.

๐Ÿ’ก

  • The thread is the content and history of a digital passport from a previous blockchain. A thread can be composed of one or multiple fibers if the digital passport is bridged multiple times.
  • The viewKey remains the same on both chains.
fiber = {
  origin: {
    protocolName: "POA",
    tokenId: 54545,
    chainId: 99,
    smartContractAddress: "0xABCDEF",
  },
  destination: {
    protocolName: "SUPERNET",
    tokenId: 9893,
    chainId: 11891,
    smartContractAddress: "0xEFGHIJK",
  },
  events: {
    hydrate: {
	address: "0xDCb0B81223547540dA3537Bf2F19eAE09FB0A97E",
  blockNumber: 28824192,
  transactionHash:
    "0x59ea6b79db92771f17767e7ffbb1f21945d51fbf6df40164626660294a41964f",
  transactionIndex: 69,
  blockHash:
    "0xc00da63f2fcd9b339725fe3008ff9d3cd6757d52e648e7b8c88abd91b9d10285",
  logIndex: 265,
  removed: false,
  id: "log_acda6df6",
  returnValues: {
    0: "70827165",
    1: "0x29969a0ceda4e072ca9cbe1af8d125ce5fc43e9176017cf95798b1817824eded",
    2: "",
    3: "0x2A4d02879f564660eAC2c27843Da31993c2Cb498",
    4: "1811318229",
    5: false,
    6: "1653638243",
    _tokenId: "70827165",
    _imprint:
      "0x29969a0ceda4e072ca9cbe1af8d125ce5fc43e9176017cf95798b1817824eded",
    _uri: "",
    _initialKey: "0x2A4d02879f564660eAC2c27843Da31993c2Cb498",
    _tokenRecoveryTimestamp: "1811318229",
    _initialKeyIsRequestKey: false,
    _tokenCreation: "1653638243",
  },
  event: "Hydrated",
  signature:
    "0x0166db8152debe7d1cfed1b1e12a32a28a986839ab44dff49682be23e29704de",
  raw: {
    data: "0x00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002a4d02879f564660eac2c27843da31993c2cb498000000000000000000000000000000000000000000000000000000006bf685d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000629084630000000000000000000000000000000000000000000000000000000000000000",
    topics: [
      "0x0166db8152debe7d1cfed1b1e12a32a28a986839ab44dff49682be23e29704de",
      "0x000000000000000000000000000000000000000000000000000000000438bc9d",
      "0x29969a0ceda4e072ca9cbe1af8d125ce5fc43e9176017cf95798b1817824eded",
    ],
  }    },
    transfers: [
      {
  address: "0xDCb0B81223547540dA3537Bf2F19eAE09FB0A97E",
  blockNumber: 28833389,
  transactionHash:
    "0x189c224036e5472bba1521baef7b2659f70aac7b11806fef1823b0b6b41fa373",
  transactionIndex: 20,
  blockHash:
    "0x7ea9c1775ec6479e4d3a394d0efb5ffa6ae9d054550382be454afa3c67fab25c",
  logIndex: 73,
  removed: false,
  id: "log_e25b73c7",
  returnValues: {
    0: "0x0000000000000000000000000000000000000000",
    1: "0xE24c5489c973375334d1a1e43B791277F8c0f039",
    2: "65072687",
    _from: "0x0000000000000000000000000000000000000000",
    _to: "0xE24c5489c973375334d1a1e43B791277F8c0f039",
    _tokenId: "65072687",
  },
  event: "Transfer",
  signature:
    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
  raw: {
    data: "0x",
    topics: [
      "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
      "0x0000000000000000000000000000000000000000000000000000000000000000",
      "0x000000000000000000000000e24c5489c973375334d1a1e43b791277f8c0f039",
      "0x0000000000000000000000000000000000000000000000000000000003e0ee2f",
    ],
  }
      },
    ],
  },
  arianeeEvents: [
    { 
      content: {
    $schema: "https://cert.arianee.org/version1/ArianeeEvent-i18n.json",
    title: "saleout event",
  },
  address: "0xD64bfed4255519711f9B26F0434555b6cC9556C1",
  blockNumber: 381101,
  transactionHash:
    "0x15b827e152193c465e81855864a40c540d83b17c623a68142c05c96fa5bf52e7",
  transactionIndex: 1,
  blockHash:
    "0x75663f4769c305f9d84e1ed63aaa00fe465d21abf940879af41329dcf32e51c2",
  logIndex: 6,
  removed: false,
  id: "log_5584851d",
  returnValues: {
    0: "97273800",
    1: "0xf028bb7d46f1142D35FD12386137c96371667611",
    _eventId: "97273800",
    _sender: "0xf028bb7d46f1142D35FD12386137c96371667611",
  },
  event: "EventAccepted",
  signature:
    "0x801d564d3920ab7f9d83def865765f310bf8d043086d5ba3e544bd6f2073ad8c",
  raw: {
    data: "0x",
    topics: [
      "0x801d564d3920ab7f9d83def865765f310bf8d043086d5ba3e544bd6f2073ad8c",
      "0x0000000000000000000000000000000000000000000000000000000005cc47c8",
      "0x000000000000000000000000f028bb7d46f1142d35fd12386137c96371667611",
    ],
  },
}
thread = [
	fiber = {
    origin: {
     protocolName: "POA",
     tokenId: 54545,
     chainId: 99,
     smartContractAddress: "0xABCDEF",
  },
  destination: {
    protocolName: "SUPERNET",
    tokenId: 9893,
    chainId: 11891,
    smartContractAddress: "0xEFGHIJK",
  },
  events: {
    hydrate: {
	address: "0xDCb0B81223547540dA3537Bf2F19eAE09FB0A97E",
  blockNumber: 28824192,
  transactionHash:
    "0x59ea6b79db92771f17767e7ffbb1f21945d51fbf6df40164626660294a41964f",
  transactionIndex: 69,
  blockHash:
    "0xc00da63f2fcd9b339725fe3008ff9d3cd6757d52e648e7b8c88abd91b9d10285",
  logIndex: 265,
  removed: false,
  id: "log_acda6df6",
  returnValues: {
    0: "70827165",
    1: "0x29969a0ceda4e072ca9cbe1af8d125ce5fc43e9176017cf95798b1817824eded",
    2: "",
    3: "0x2A4d02879f564660eAC2c27843Da31993c2Cb498",
    4: "1811318229",
    5: false,
    6: "1653638243",
    _tokenId: "70827165",
    _imprint:
      "0x29969a0ceda4e072ca9cbe1af8d125ce5fc43e9176017cf95798b1817824eded",
    _uri: "",
    _initialKey: "0x2A4d02879f564660eAC2c27843Da31993c2Cb498",
    _tokenRecoveryTimestamp: "1811318229",
    _initialKeyIsRequestKey: false,
    _tokenCreation: "1653638243",
  },
  event: "Hydrated",
  signature:
    "0x0166db8152debe7d1cfed1b1e12a32a28a986839ab44dff49682be23e29704de",
  raw: {
    data: "0x00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002a4d02879f564660eac2c27843da31993c2cb498000000000000000000000000000000000000000000000000000000006bf685d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000629084630000000000000000000000000000000000000000000000000000000000000000",
    topics: [
      "0x0166db8152debe7d1cfed1b1e12a32a28a986839ab44dff49682be23e29704de",
      "0x000000000000000000000000000000000000000000000000000000000438bc9d",
      "0x29969a0ceda4e072ca9cbe1af8d125ce5fc43e9176017cf95798b1817824eded",
    ],
  }    },
    transfers: [
      {
  address: "0xDCb0B81223547540dA3537Bf2F19eAE09FB0A97E",
  blockNumber: 28833389,
  transactionHash:
    "0x189c224036e5472bba1521baef7b2659f70aac7b11806fef1823b0b6b41fa373",
  transactionIndex: 20,
  blockHash:
    "0x7ea9c1775ec6479e4d3a394d0efb5ffa6ae9d054550382be454afa3c67fab25c",
  logIndex: 73,
  removed: false,
  id: "log_e25b73c7",
  returnValues: {
    0: "0x0000000000000000000000000000000000000000",
    1: "0xE24c5489c973375334d1a1e43B791277F8c0f039",
    2: "65072687",
    _from: "0x0000000000000000000000000000000000000000",
    _to: "0xE24c5489c973375334d1a1e43B791277F8c0f039",
    _tokenId: "65072687",
  },
  event: "Transfer",
  signature:
    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
  raw: {
    data: "0x",
    topics: [
      "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
      "0x0000000000000000000000000000000000000000000000000000000000000000",
      "0x000000000000000000000000e24c5489c973375334d1a1e43b791277f8c0f039",
      "0x0000000000000000000000000000000000000000000000000000000003e0ee2f",
    ],
  }
      },
    ],
  },
  arianeeEvents: [
    { 
      content: {
    $schema: "https://cert.arianee.org/version1/ArianeeEvent-i18n.json",
    title: "saleout event",
  },
  address: "0xD64bfed4255519711f9B26F0434555b6cC9556C1",
  blockNumber: 381101,
  transactionHash:
    "0x15b827e152193c465e81855864a40c540d83b17c623a68142c05c96fa5bf52e7",
  transactionIndex: 1,
  blockHash:
    "0x75663f4769c305f9d84e1ed63aaa00fe465d21abf940879af41329dcf32e51c2",
  logIndex: 6,
  removed: false,
  id: "log_5584851d",
  returnValues: {
    0: "97273800",
    1: "0xf028bb7d46f1142D35FD12386137c96371667611",
    _eventId: "97273800",
    _sender: "0xf028bb7d46f1142D35FD12386137c96371667611",
  },
  event: "EventAccepted",
  signature:
    "0x801d564d3920ab7f9d83def865765f310bf8d043086d5ba3e544bd6f2073ad8c",
  raw: {
    data: "0x",
    topics: [
      "0x801d564d3920ab7f9d83def865765f310bf8d043086d5ba3e544bd6f2073ad8c",
      "0x0000000000000000000000000000000000000000000000000000000005cc47c8",
      "0x000000000000000000000000f028bb7d46f1142d35fd12386137c96371667611",
    ],
  },
}
] 

Where the previous chain information is stored?

Because we donโ€™t want to have dependencies on the previous chain, the thread is accessible no matter what happens to the previous blockchain. We add it to the digital passport content on hydrate. The thread cannot be updated. See conventions. This means that a brand can access the content of a thread via the digital passport content.

What's the impact on end-users?

Digital Passport History

The new bridged digital passport will display filtered events (transfers, hydrate, etc.) to make it look like there is only one digital passport with a continuous history. Thread is concatenated with current blockchain records.

๐Ÿ“… History Example

DAY 0: NFT is created on chain1.

  • NFT-chain1 is hydrated.

DAY 1: NFT is claimed by owner1.

  • NFT-chain1 is transferred to owner1.

DAY 2: NFT is bridged.

  • If the brand is not the NFT owner - NFT-chain1 is recovered to the NFT Management Platform wallet address.
  • NFT-chain1 is recovered to bridge address: 0x0000000000000000000000000000000B7269d67e. *
  • NFT-chain1 is updated with the thread. *
  • NFT-chain2 is hydrated. *
  • If the brand is not the NFT owner - NFT-chain2 is transferred to owner1. *

๐Ÿ’ก

  • For an end-user (owner1) the history is the same before and after bridging. The hydrate & transfer with * are transparent.
  • The Arianee SDK has an option to display the full history, including bridging events.

Deeplink Retro-Compatibility

A QR code with the deeplink from the previous blockchain will redirect to the digital passport on the new blockchain.

Example: https://arian.ee/12345,myViewKey should redirect https://supernet.arian.ee/12345,myViewKey.

โš ๏ธ

Redirection is operational as long as chain1 is still running.