- RFC: 03-014
- Authors: Venkatraman Ramakrishna, Krishnasuri Narayanam, Sandeep Nishad, Dhinakaran Vinayagamurthy
- Status: Proposed
- Since: 21-Dec-2022
This document specifies the data formats used in the cross-network asset transfer protocol. The structures defined in this document are generic and the operations on them are generic (see the protocol specification for details.) These structures are oblivious to the specifications and semantics of any digital asset maintained by any DLT application (e.g., any application chaincode in Fabric or any CorDapp in Corda).
To communicate pledge (burning of an asset in a ledger for minting that asset in the same or in a differet ledger at a later point in time) details between the application layer or a contract and the interoperation module or across networks, we need common DLT-neutral structures. Weaver supports atomic asset transfer between two parties, so a pledge agreement consists of the asset transfer commitment by a party in one ledger to an other party in a different ledger. The general structure to pledge assets (both fungible and non-fungible) is as follows (this structure can be extended in future when Weaver supports multi-party multi-asset transfers):
message AssetPledge {
bytes assetDetails = 1;
string localNetworkID = 2;
string remoteNetworkID = 3;
string recipient = 4;
uint64 expiryTimeSecs = 5;
}
assetDetails
field is a serialized asset details structure containing specific information about the asset being pledged. The details are opaque to the interoperation module, which simply treats this asset as a digital blob that is ready to be pledged. Only the relevant application (e.g., chaincode, CorDapp) can parse and interpret the asset details, and must contain logic to perform additional checks and operations on the asset's state. Note that only the party owning the asset (captured as part of asset details structure) should be able to perform a pledge on the assetlocalNetworkID
field is the identifier of the ledger in which the asset resides before the transfer (this is the network that exports the asset)remoteNetworkID
field is the identifier of the ledger in which the asset resides after the transfer (this is the network that imports the asset)recipient
field is the party in the importing network who owns the asset post the asset transferexpiryTimeSecs
field is the pledge validity time period before which therecipient
can mint the asset in the importing networkremoteNetworkID
To communicate claim (minting of the asset after transfer) details between the application layer or a contract and the interoperation module or across networks, we need common DLT-neutral structures. The general structure to claim assets (both fungible and non-fungible) is as follows:
message AssetClaimStatus {
bytes assetDetails = 1;
string localNetworkID = 2;
string remoteNetworkID = 3;
string recipient = 4;
bool claimStatus = 5;
uint64 expiryTimeSecs = 6;
bool expirationStatus = 7;
}
assetDetails
field is a serialized asset details structure containing specific information about the asset being claimed. The details are opaque to the interoperation module, which simply treats this asset as a digital blob that is ready to be claimed. Only the relevant application (e.g., chaincode, CorDapp) can parse and interpret the asset details, and must contain logic to perform additional checks and operations on the asset's state. Note that the party owning the asset (captured as part of asset details structure) is set to the party specified as therecipient
localNetworkID
field is the identifier of the ledger in which the asset resides after the transfer (this is the network that imports the asset)remoteNetworkID
field is the identifier of the ledger in which the asset resides before the transfer (this is the network that exports the asset)recipient
field is the party in the importing network who owns the asset post the asset transfer; only this party can perform the claim on the asset that was pledged earlierclaimStatus
boolean field specifies if claim on the asset has taken place or notexpiryTimeSecs
field is the pledge validity time period (captured as EPOCH time instant) before which therecipient
can mint the asset in the importing networklocalNetworkID
expirationStatus
boolean field captures if current time in the importing ledger (localNetworkID
) is beyondexpiryTimeSecs
or not. This field helps the Weaver asset transfer protocol to tolerate even if the clock in export network is not synchronized with clock in the import network (minting of asset in export network is only possible afterexpirationStatus
becomesture
andclaimStatus
isfalse
);