Asset Exchange
This document lists sample ways in which you can exercise the asset-exchange interoperation protocol on the test network launched earlier.
For this scenario, you only need the networks to be running with the appropriate contracts deployed and the ledgers bootstrapped. You do not need to run relays and drivers. You can run the following combinations of exchanges (other combinations of DLTs will be supported soon).
Fabric with Fabric
One Fabric network transfers a bond from Alice to Bob in exchange for a transfer of tokens from Bob to Alice in the other network Ensure that one of the following chaincodes have been deployed in both networks:
simpleasset
simpleassetandinterop
simpleassettransfer
Run the following steps:
Notes |
---|
The hash used in following steps can be replaced by any valid SHA256 hash. |
- Navigate to either the
samples/fabric/fabric-cli
folder or thesamples/fabric/go-cli
folder in your clone of the Weaver repository. - Run the following to verify the status of the assets owned by
alice
andbob
in the two networks:./scripts/getAssetStatus.sh 2
- Complete the asset exchange in either of the two different ways:
- Using a single command:
- Run the following to trigger exchange of bond
bond01:a03
owned byalice
innetwork1
with100
units of tokenstoken1
owned bybob
innetwork2
:./bin/fabric-cli asset exchange-all --network1=network1 --network2=network2 --secret=secrettext --timeout-duration=100 alice:bond01:a03:bob:token1:100
- To verify that
bob
now owns a bond in exchange foralice
owning some tokens, run the following:./scripts/getAssetStatus.sh 2
- Run the following to trigger exchange of bond
- Using step-by-step commands:
- Generate Secret-Hash Pair using following command (prints hash in base64):
./bin/fabric-cli hash --hash_fn=SHA256 secrettext
- Run the following to trigger
alice
lockingbond01:a03
forbob
innetwork1
./bin/fabric-cli asset exchange lock --timeout-duration=3600 --locker=alice --recipient=bob --hashBase64=ivHErp1x4bJDKuRo6L5bApO/DdoyD/dG0mAZrzLZEIs= --target-network=network1 --param=bond01:a03
- Run the following to verify
alice
's lock:./bin/fabric-cli asset exchange is-locked --locker=alice --recipient=bob --target-network=network1 --param=bond01:a03
- Run the following to trigger
bob
locking100
units oftoken1
foralice
innetwork2
:Note the./bin/fabric-cli asset exchange lock --fungible --timeout-duration=1800 --locker=bob --recipient=alice --hashBase64=ivHErp1x4bJDKuRo6L5bApO/DdoyD/dG0mAZrzLZEIs= --target-network=network2 --param=token1:100
contract-id
printed as output in above command. The output line containingcontract-id
(text in base64 afterContract Id:
) would like this:ℹ Fungible Asset Locked with Contract Id: E0JZq8Z+eS//2Bt4WU0pU210MvNgDC2hdUT1RgszOq0=, preimage: null, hashvalue: ivHErp1x4bJDKuRo6L5bApO/DdoyD/dG0mAZrzLZEIs=
- Run the following to verify
bob
's lock:./bin/fabric-cli asset exchange is-locked --fungible --locker=bob --recipient=alice --target-network=network2 --contract-id=<contract-id>
- Run the following to trigger
alice
's claim for100
units oftoken1
locked bybob
innetwork2
:./bin/fabric-cli asset exchange claim --fungible --recipient=alice --target-network=network2 --contract-id=<contract-id> --secret=<hash-pre-image>
- Run the following to trigger
bob
's claim forbond01:a03
locked byalice
innetwork1
:./bin/fabric-cli asset exchange claim --recipient=bob --locker=alice --target-network=network1 --param=bond01:a03 --secret=<hash-pre-image>
- If
alice
wants to unlock the bond asset, run the following to triggeralice
's re-claim forbond01:a03
locked innetwork1
:./bin/fabric-cli asset exchange unlock --locker=alice --recipient=bob --target-network=network1 --param=bond01:a03
- If
bob
wants to unlock the token asset, run the following to triggerbob
's re-claim fortoken1:100
locked innetwork2
:./bin/fabric-cli asset exchange unlock --fungible --locker=bob --target-network=network2 --contract-id=<contract-id>
- Generate Secret-Hash Pair using following command (prints hash in base64):
- Using a single command:
Fabric with Corda
We will demonstrate asset exchange of a bond in Fabric network1
with tokens on Corda_Network
.
For Fabric commands, run from samples/fabric/fabric-cli
folder, and for Corda commands, run from samples/corda/corda-simple-application
folder. Here Alice
and Bob
in Fabric network1
correspond to PartyA
(CORDA_PORT=10006
) and PartyB
(CORDA_PORT=10009
) in Corda_Network
respectively. Following are the step-by-step asset exchange process:
Notes |
---|
The hash used in following steps can be replaced by any valid SHA256 hash. |
- Run the following to verify the status of the bond assets owned by
alice
andbob
in the Fabric networknetwork1
fromsamples/fabric/fabric-cli
folder:./scripts/getAssetStatus.sh
- Run the following to verify the status of the assets owned by
PartyA
andPartyB
in theCorda_Network
fromsamples/corda/corda-simple-application
folder:
./scripts/getAssetStatus.sh
- Generate Secret-Hash Pair using following command (prints hash in base64):
./bin/fabric-cli hash --hash_fn=SHA256 secrettext
- Run the following to trigger
alice
lockingbond01:a03
forbob
innetwork1
for 60 mins:./bin/fabric-cli asset exchange lock --timeout-duration=3600 --locker=alice --recipient=bob --hashBase64=ivHErp1x4bJDKuRo6L5bApO/DdoyD/dG0mAZrzLZEIs= --target-network=network1 --param=bond01:a03
- Run the following to verify
alice
's lock:./bin/fabric-cli asset exchange is-locked --locker=alice --recipient=bob --target-network=network1 --param=bond01:a03
- Run the following to trigger
PartyB
locking50
units of token typet1
forPartyA
inCorda_Network
for 30 mins:Note theCORDA_PORT=10009 ./clients/build/install/clients/bin/clients lock-asset --fungible --hashBase64=ivHErp1x4bJDKuRo6L5bApO/DdoyD/dG0mAZrzLZEIs= --timeout=1800 --recipient="O=PartyA,L=London,C=GB" --param=t1:50
contract-id
displayed after successful execution of the command, will be used in next steps. The output containingcontract-id
would like this:HTLC Lock State created with contract ID Right(b=10448674_80d2bee7-5a5d-45df-b14e-60bac4ba1bf3).
contract-id
is the alphanumeric text (with underscore and hyphens) afterb=
within parenthesis. - Run the following to verify
PartyB
's lock (can be verified by both parties):CORDA_PORT=10006 ./clients/build/install/clients/bin/clients is-asset-locked --contract-id=<contract-id>
- Run the following to trigger
PartyA
's claim for50
units of token typet1
locked byPartyB
inCorda_Network
:CORDA_PORT=10006 ./clients/build/install/clients/bin/clients claim-asset --secret=secrettext --contract-id=<contract-id>
PartyB
can see its node's logs to get the revealed hash preimage, and use it to claim the bond in the Fabric network. - Run the following to trigger
bob
's claim forbond01:a03
locked byalice
innetwork1
:./bin/fabric-cli asset exchange claim --recipient=bob --locker=alice --target-network=network1 --param=bond01:a03 --secret=secrettext
- Run the following to verify the status of the bond assets owned by
alice
andbob
in the Fabric networknetwork1
fromsamples/fabric/fabric-cli
folder:./scripts/getAssetStatus.sh
- Run the following to verify the status of the assets owned by
PartyA
andPartyB
in theCorda_Network
fromsamples/corda/corda-simple-application
folder:./scripts/getAssetStatus.sh
The above steps complete a successful asset exchange between Fabric and Corda networks. In addition to the above commands, following commands can be run if specified timeout has expired and the locked asset remains unclaimed.
- If
alice
wants to unlock the bond asset, run the following to triggeralice
's re-claim forbond01:a03
locked innetwork1
:./bin/fabric-cli asset exchange unlock --locker=alice --recipient=bob --target-network=network1 --param=bond01:a03
- If
PartyB
wants to unlock the token asset, run the following to trigger unlock fort1:50
locked inCorda_Network
:CORDA_PORT=10009 ./clients/build/install/clients/bin/clients unlock-asset --contract-id=<contract-id>
Corda with Corda
We will demonstrate asset exchange of a tokens in Corda_Network
with tokens on Corda_Network2
. Here PartyA
(CORDA_PORT=10006
) and PartyB
(CORDA_PORT=10009
) in Corda_Network
correspond to PartyA
(CORDA_PORT=30006
) and PartyB
(CORDA_PORT=30009
) in Corda_Network2
respectively. Following are the step-by-step asset exchange process:
Notes |
---|
The hash used in following steps can be replaced by any valid SHA256 hash. |
- Navigate to
samples/corda/corda-simple-application
folder. - Run the following to verify the status of the tokens owned by
PartyA
andPartyB
in theCorda_Network
andCorda_Network2
:./scripts/getAssetStatus.sh 2
- Generate Secret-Hash Pair using following command (prints hash in base64):
./clients/build/install/clients/bin/clients utils hash --hash-fn=SHA256 -s secrettext
- Run the following to trigger
PartyA
locking30
units of token typet1
forPartyB
inCorda_Network
for 60 mins:Note theCORDA_PORT=10006 ./clients/build/install/clients/bin/clients lock-asset --fungible --hashBase64=ivHErp1x4bJDKuRo6L5bApO/DdoyD/dG0mAZrzLZEIs= --timeout=3600 --recipient="O=PartyB,L=London,C=GB" --param=t1:30
contract-id
displayed after successful execution of the command, will be used in next steps. The output containingcontract-id
would like this:HTLC Lock State created with contract ID Right(b=10448674_80d2bee7-5a5d-45df-b14e-60bac4ba1bf3).
contract-id
is the alphanumeric text (with underscore and hyphens) afterb=
within parenthesis. Let's denote it<contract-id-1>
. - Run the following to verify
PartyA
's lock (can be verified by both parties):CORDA_PORT=10009 ./clients/build/install/clients/bin/clients is-asset-locked --contract-id=<contract-id-1>
- Run the following to trigger
PartyB
locking50
units of token typet2
forPartyA
inCorda_Network2
for 30 mins:Note theCORDA_PORT=30009 ./clients/build/install/clients/bin/clients lock-asset --fungible --hashBase64=ivHErp1x4bJDKuRo6L5bApO/DdoyD/dG0mAZrzLZEIs= --timeout=1800 --recipient="O=PartyA,L=London,C=GB" --param=t2:50
contract-id
displayed after successful execution of the command, will be used in next steps. Let's denote it<contract-id-2>
. - Run the following to verify
PartyB
's lock (can be verified by both parties):CORDA_PORT=30006 ./clients/build/install/clients/bin/clients is-asset-locked --contract-id=<contract-id-2>
- Run the following to trigger
PartyA
's claim for50
units of token typet2
locked byPartyB
inCorda_Network2
:CORDA_PORT=30006 ./clients/build/install/clients/bin/clients claim-asset --secret=secrettext --contract-id=<contract-id-2>
PartyB
can see its node's logs to get the revealed hash preimage, and use it to claim the bond in the Fabric network. - Run the following to trigger
PartyB
's claim for30
units of token typet1
locked byPartyA
inCorda_Network
:CORDA_PORT=10009 ./clients/build/install/clients/bin/clients claim-asset --secret=secrettext --contract-id=<contract-id-1>
- Run the following to verify the status of the tokens owned by
PartyA
andPartyB
in theCorda_Network
andCorda_Network2
:./scripts/getAssetStatus.sh 2
The above steps complete a successful asset exchange between two Corda networks. In addition to the above commands, following commands can be run if specified timeout has expired and the locked asset remains unclaimed.
- If
PartyA
wants to unlock the tokent1:30
asset, run the following to triggerPartyA
's re-claim inCorda_Network
:CORDA_PORT=10006 ./clients/build/install/clients/bin/clients unlock-asset --contract-id=<contract-id-1>
- If
PartyB
wants to unlock the tokent2:50
asset, run the following to triggerPartyB
's re-claim inCorda_Network2
:CORDA_PORT=30009 ./clients/build/install/clients/bin/clients unlock-asset --contract-id=<contract-id-2>