Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

DAP - Asset Redemption

Asset Redemption Transaction Flow
by

Rodrigo Acosta

on 17 December 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of DAP - Asset Redemption

Se instala la Redeem Point Reference Wallet en el dispositivo
RedeemPoint Actor Network Service
El RedeemPoint se registra en el communication Server.
Asset Issuer Actor Network Service
Solicita al Communication Server la Lista de Asset Issuers registrados para poder asociarse con uno.
Redeem Point Reference Wallet
List<AssetIssuerActor> getAvailableAssetIssuers
Redeem Point Reference Wallet
El RedeemPoint selecciona un Asset Issuer para asociarse. La RedeemPoint Reference Wallet no permite operaciones sin estar asociado a ningun Asset Issuer
Redeem Point Reference Wallet
Asset Issuer Actor Network Service
Se conecta al Asset Issuer seleccionado para solicitar autorización de unión. Esta llamada será async y la respuesta llegará a través del Asset Issuer network Service. De aceptarse la solicitud desde el Asset Issuer, esta información queda persistida en el RedeemPoint Actor. El redeemPoint Actor guarda entre otras cosas el IdentityIssuer.
Redeem Point Reference Wallet
allowLinkRedeemPoint (RedeemPointActor)
Redeem Point Reference Wallet
Ahora el Redeem Point está habilitado para recibir Assets the ese Isuer y puede solicitar registrarse a los que considere necesarios.

La autorización está del lado del Issuer
Redeem Point Reference Wallet
En el dispositivo del User, con la Asset User Reference Wallet
AssetUser Reference Wallet
Ingresa un Asset enviado desde un Issuer, y se actualiza el Balance de la Asset wallet.

El DigitalAsset recibido, tiene un AssetIssuerIdentity ID.
RedeemPoint Actor Network Service
Solicita al Communication Server la Lista de RedeemPoints registrados que pueden redimir el Asset que tenemos. Este proceso se actualiza con la llegada de cada nuevo Asset.
Asset User Reference Wallet
List<RedeemPointActor> getAvailableRedeemPoints (String AssetIssuerIdentity)
AssetUser Actor Network Service
El AssetUser se registra en el communication Server.
Como el RedeemPoint nos envió una dirección de Bitcoin, la misma fue generada desde una clave pública y registrada en el Address Book.

Esta nueva dirección enviada a nosotros es monitoreada en la red de Bitcoin
RedeemPoint Address book
RedeemPoint Address book
En el dispositivo del User, con la Asset User Reference Wallet
Asset Redemption Transaction
El usuario seleccionó el Asset y el Redeem Point donde redime el asset dando inicio a la transacción.
void redeemAsset(DigitalAssetMetadata, RedeemPointActor)

Asset Vault
El issuer crea un nuevo branch en la HD Wallet asignada al nuevo Redeem Point.

Genera una extended public Key y guarda registro de la misma en la RedeemPoint Address Book.
RedeemPoint Actor Network Service
sendExtendedPublicKey (ECKey key)

Envía la extended public Key al Redeem point para su guardado.
Reedeem Point Address Book
La clave pública es guardada en el RedeemPoint Address book y cada vez que me soliciten una Address la registro en el Address Book y la conecto con la Crypto Network
Reedeem Point Address Book
Disponemos de saldo positivo de Assets en la Reference Wallet.
Disponemos de una lista de RedeemPoints disponible para redimir el asset que tenemos.
Asset User Reference Wallet
Asset User Reference Wallet
Asset Vault
GenesisTransaction getGenesisTransaction(String transactionId)
Para validar que el DigitalAssetMetadata que vamos a enviar no ha cambiado ni ha sido editado. Debemos verificar el Hash enviado en la transacción Crypto y verificar que es el mismo.
Asset Distribution Transaction
Asset Distribution Transaction
bool isDigitalAssetValid (DigitalAssetMetadata, String GenesisHash)
Asset Distribution Transaction
Asset Vault
long getAvailableBalance (String genesisTransaction)
Verificamos que tenemos balance suficiente para enviar el Asset asegurándonos que el UTXO de la genesis transacción recibido sigue siendo válido.

El valor retornado debe ser igual al GenesisAmount.
Asset Distribution Transaction
Asset Distribution Transaction
bool isAssetContractValid()
Debemos verificar que el Asset sigue siendo válido según el contrato. La propiedad del contrato a verificar es la ExpirationDate. Por lo tanto para poder enviarlo, debe estar dentro de la fecha válida.
Asset Distribution Transaction
Asset Transmission Network Service
UUID distributeAssetToRedeemPoint(DigitalAssetMetadata, RedeemPoint);
Validado el DigitalAssetMetadata, lo enviamos al RedeemPoint para que haga lo mismo.
Esta parte de la transacción es async. Luego nos notificará el estado.
Asset Distribution Transaction
Asset Distribution Transaction
bool isDigitalAssetMetadataValid(DigitalAssetMetadata, UUID transactionId)
Validamos si el contrato es válido del lado del RedeemPoint.
Asset Distribution Transaction
Asset Vault
GenesisTransaction getGenesisTransaction(String transactionId)
Obtenemos la Genesis Transaction de la Vault (que la obtendrá del blockChain o de un peer) y verificamos que el Hash del Asset sigue siendo el mismo que el hash del DigitalAssetMetadata que recibimos.
Asset Distribution Transaction
Asset Distribution Transaction
Si el DigitalAssetMetadata es válido (Contrato y Hash), entonce lo persistimos en el plugin hasta recibir la transacción bitcoin.
Asset Distribution Transaction
Asset Distribution NetworkService
void updateTransactionStatus(UUID transactionId, TransactionStatus)
Asset Distribution Transaction
Informamos al User si hemos aceptado el DigitalAssetTransaction como valido o no.
Asset User Wallet
generateAssetAvailableDebit (DigitalAssetMetadata)
Avisamos a la User Wallet que un Asset ha sido enviado al redeem Point.
Asset Distribution Transaction
Asset User Wallet
generateAssetBookDebit (DigitalAssetMetadata)
Al recibir el evento del Outgoing Crypto, avisamos que la crypto transaccion que envió el asset al redeem Point ha sido confirmada.
Asset Distribution Transaction
Incoming Crypto
evento IncomingCryptoAssetTransactionOnCryptoNetwork.
Asset Redeption Transaction
Le informa a la Asset Distribution Asset que entraron bitcoins pertenecientes a un Asset con la información de la transacción. Esta transacción incluye el input de la GenesisTransaction que se utiliza para identificar el Asset al cual pertenecen.
Asset RedeemPoint Wallet
bookCredit (DigitalAssetMetadata)
Asset Redeption Transaction
Genera un crédito en el book balance de la Asset RedeemPoint Wallet y persiste el DigitalAssetMetadata.
Asset RedeemPoint Wallet
AvailableCredit (DigitalAssetMetadata)
Asset Redeption Transaction
Genera un crédito en el available balance de la Asset RedeemPoint Wallet cuando se confirma el Asset en la red bitcoin.
Asset Vault
sendBitcoinAssetToRedeemPoint(String genesisTransactionId, CryptoAddress addressTo)
Estamos listos para terminar las acciones del lado del User, nos queda enviar los bitcoins correspondientes al Asset original. Para ello, la Asset Vault generará una nueva transacción bitcoin formada por el INPUT referenciando al UTXO de la GenesisTransaction.
Asset Distribution Transaction
Obtenemos la Genesis Transaction de la Vault (que la obtendrá del blockChain o de un peer) y verificamos que el Hash del Asset sigue siendo el mismo que el hash del DigitalAssetMetadata que recibimos.
Incoming Crypto Network
En el Issuer, el Incoming Crypto Network detecta
una transacción de bitcoin enviada a una dirección
de nuestra Asset Vault.

La dirección utilizada fue registrada en el RedeemPoint Address book.
Incoming Crypto Network
En el Issuer, el Incoming Crypto Network detecta
una transacción de bitcoin enviada a una dirección
de nuestra Asset Vault.

La dirección utilizada fue registrada en el RedeemPoint Address book.
Asset Vault
Mediante la navegación de los inputs y outputs de la transacción Bitcoin, podemos llegar a la genesis transacción y determinar a qué Asset corresponden los bitcoins.

Y por ende podemos determinar a qué UserActor fueron enviados
Asset Issuer Actor
Marcamos al User Actor como el responsable de haber redimido el asset original.
Marcamos al RedeemPoint como el responsable de haber redimido el asset original

Aseet Issuer Reference Wallet
La aplicación del Issuer muestra estas estadísticas de uso de Users y Redeem Points.
Full transcript