Skip to content

Commit fb1d0ba

Browse files
committed
java utilities change
1 parent 2c0a4a8 commit fb1d0ba

File tree

8 files changed

+78
-29
lines changed

8 files changed

+78
-29
lines changed

Tokens/bikemarket/build.gradle

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ buildscript {
1515
guava_version = constants.getProperty("guavaVersion")
1616
//Tokens
1717
tokens_release_group = 'com.r3.corda.lib.tokens'
18-
tokens_release_version = '1.0'
19-
18+
tokens_release_version = '1.2'
2019
}
2120

2221
repositories {
@@ -108,7 +107,6 @@ dependencies {
108107
// Token SDK dependencies.
109108
cordapp "$tokens_release_group:tokens-contracts:$tokens_release_version"
110109
cordapp "$tokens_release_group:tokens-workflows:$tokens_release_version"
111-
cordapp "$tokens_release_group:tokens-money:$tokens_release_version"
112110
}
113111
cordapp {
114112
info {
@@ -125,7 +123,6 @@ task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) {
125123
}
126124
cordapp("$tokens_release_group:tokens-contracts:$tokens_release_version")
127125
cordapp("$tokens_release_group:tokens-workflows:$tokens_release_version")
128-
cordapp("$tokens_release_group:tokens-money:$tokens_release_version")
129126
cordapp project(':contracts')
130127
cordapp project(':workflows')
131128
}

Tokens/bikemarket/contracts/src/main/java/net/corda/examples/bikemarket/states/FrameTokenState.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.google.common.collect.ImmutableList;
44
import com.r3.corda.lib.tokens.contracts.states.EvolvableTokenType;
5+
import com.r3.corda.lib.tokens.contracts.types.TokenPointer;
6+
import net.corda.core.contracts.LinearPointer;
57
import net.corda.examples.bikemarket.contracts.FrameContract;
68
import net.corda.core.contracts.BelongsToContract;
79
import net.corda.core.contracts.UniqueIdentifier;
@@ -50,4 +52,10 @@ public List<Party> getMaintainers() {
5052
public UniqueIdentifier getLinearId() {
5153
return this.uniqueIdentifier;
5254
}
55+
56+
/* This method returns a TokenPointer by using the linear Id of the evolvable state */
57+
public TokenPointer<FrameTokenState> toPointer(){
58+
LinearPointer<FrameTokenState> linearPointer = new LinearPointer<>(uniqueIdentifier, FrameTokenState.class);
59+
return new TokenPointer<>(linearPointer, fractionDigits);
60+
}
5361
}

Tokens/bikemarket/contracts/src/main/java/net/corda/examples/bikemarket/states/WheelsTokenState.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.google.common.collect.ImmutableList;
44
import com.r3.corda.lib.tokens.contracts.states.EvolvableTokenType;
5+
import com.r3.corda.lib.tokens.contracts.types.TokenPointer;
6+
import net.corda.core.contracts.LinearPointer;
57
import net.corda.examples.bikemarket.contracts.WheelsContract;
68
import net.corda.core.contracts.BelongsToContract;
79
import net.corda.core.contracts.UniqueIdentifier;
@@ -47,4 +49,10 @@ public List<Party> getMaintainers() {
4749
public UniqueIdentifier getLinearId() {
4850
return this.uniqueIdentifier;
4951
}
52+
53+
/* This method returns a TokenPointer by using the linear Id of the evolvable state */
54+
public TokenPointer<WheelsTokenState> toPointer(){
55+
LinearPointer<WheelsTokenState> linearPointer = new LinearPointer<>(uniqueIdentifier, WheelsTokenState.class);
56+
return new TokenPointer<>(linearPointer, fractionDigits);
57+
}
5058
}

Tokens/bikemarket/workflows/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ dependencies {
5959
cordapp project(":contracts")
6060

6161
// Token SDK dependencies.
62-
cordaCompile "$tokens_release_group:tokens-money:$tokens_release_version"
6362
cordaCompile "$tokens_release_group:tokens-workflows:$tokens_release_version"
6463
}
6564

Tokens/bikemarket/workflows/src/main/java/net/corda/examples/bikemarket/flows/IssueNewBike.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.google.common.collect.ImmutableList;
55
import com.r3.corda.lib.tokens.contracts.states.NonFungibleToken;
66
import com.r3.corda.lib.tokens.workflows.flows.rpc.IssueTokens;
7+
import com.r3.corda.lib.tokens.workflows.utilities.NonFungibleTokenBuilder;
78
import net.corda.examples.bikemarket.states.FrameTokenState;
89
import net.corda.examples.bikemarket.states.WheelsTokenState;
910
import net.corda.core.contracts.StateAndRef;
@@ -49,12 +50,12 @@ public String call() throws FlowException {
4950
//get the pointer to the frame
5051
TokenPointer frametokenPointer = frametokentype.toPointer(frametokentype.getClass());
5152

52-
//assign the issuer to the frame type who will be issuing the tokens
53-
IssuedTokenType frameissuedTokenType = new IssuedTokenType(getOurIdentity(), frametokenPointer);
54-
5553
//mention the current holder also
56-
NonFungibleToken frametoken = new NonFungibleToken(frameissuedTokenType, holder, new UniqueIdentifier(), TransactionUtilitiesKt.getAttachmentIdForGenericParam(frametokenPointer));
57-
54+
NonFungibleToken frametoken = new NonFungibleTokenBuilder()
55+
.ofTokenType(frametokentype.toPointer())
56+
.issuedBy(getOurIdentity())
57+
.heldBy(holder)
58+
.buildNonFungibleToken();
5859

5960
//Step 2: Wheels Token
6061
StateAndRef<WheelsTokenState> wheelStateStateAndRef = getServiceHub().getVaultService().
@@ -67,11 +68,12 @@ public String call() throws FlowException {
6768
//get the pointer pointer to the wheel
6869
TokenPointer wheeltokenPointer = wheeltokentype.toPointer(wheeltokentype.getClass());
6970

70-
//assign the issuer to the wheel type who will be issuing the tokens
71-
IssuedTokenType wheelissuedTokenType = new IssuedTokenType(getOurIdentity(), wheeltokenPointer);
72-
7371
//mention the current holder also
74-
NonFungibleToken wheeltoken = new NonFungibleToken(wheelissuedTokenType, holder, new UniqueIdentifier(), TransactionUtilitiesKt.getAttachmentIdForGenericParam(wheeltokenPointer));
72+
NonFungibleToken wheeltoken = new NonFungibleTokenBuilder()
73+
.ofTokenType(wheeltokentype.toPointer())
74+
.issuedBy(getOurIdentity())
75+
.heldBy(holder)
76+
.buildNonFungibleToken();
7577

7678
//distribute the new bike (two token to be exact)
7779
//call built in flow to issue non fungible tokens

Tokens/bikemarket/workflows/src/main/java/net/corda/examples/bikemarket/flows/TransferBikeTokens.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,23 @@
22

33
import co.paralleluniverse.fibers.Suspendable;
44
import com.r3.corda.lib.tokens.contracts.types.TokenPointer;
5+
import com.r3.corda.lib.tokens.workflows.flows.move.MoveTokensUtilities;
56
import com.r3.corda.lib.tokens.workflows.flows.rpc.MoveNonFungibleTokens;
67
import com.r3.corda.lib.tokens.workflows.flows.rpc.MoveNonFungibleTokensHandler;
8+
import com.r3.corda.lib.tokens.workflows.internal.flows.distribution.UpdateDistributionListFlow;
9+
import com.r3.corda.lib.tokens.workflows.internal.flows.finality.ObserverAwareFinalityFlow;
710
import com.r3.corda.lib.tokens.workflows.types.PartyAndToken;
11+
import com.r3.corda.lib.tokens.workflows.utilities.NotaryUtilities;
12+
import net.corda.core.transactions.TransactionBuilder;
813
import net.corda.examples.bikemarket.states.FrameTokenState;
914
import net.corda.examples.bikemarket.states.WheelsTokenState;
1015
import net.corda.core.contracts.StateAndRef;
1116
import net.corda.core.flows.*;
1217
import net.corda.core.identity.Party;
1318
import net.corda.core.transactions.SignedTransaction;
1419

20+
import java.util.Collections;
21+
1522
public class TransferBikeTokens {
1623
public TransferBikeTokens() {
1724
}
@@ -45,10 +52,6 @@ public String call() throws FlowException {
4552
//get the pointer to the frame
4653
TokenPointer frametokenPointer = frametokentype.toPointer(frametokentype.getClass());
4754

48-
PartyAndToken partyAndFrameToken = new PartyAndToken(holder, frametokenPointer);
49-
50-
SignedTransaction stx1 = (SignedTransaction) subFlow(new MoveNonFungibleTokens(partyAndFrameToken));
51-
5255
//Step 2: Wheels Token
5356
StateAndRef<WheelsTokenState> wheelStateStateAndRef = getServiceHub().getVaultService().
5457
queryBy(WheelsTokenState.class).getStates().stream().filter(sf -> sf.getState().getData().getModelNum().equals(this.wheelsModel)).findAny()
@@ -60,13 +63,22 @@ public String call() throws FlowException {
6063
//get the pointer to the wheel
6164
TokenPointer wheeltokenPointer = wheeltokentype.toPointer(wheeltokentype.getClass());
6265

63-
PartyAndToken partyAndWheelToken = new PartyAndToken(holder, wheeltokenPointer);
6466

65-
SignedTransaction stx2 = (SignedTransaction) subFlow(new MoveNonFungibleTokens(partyAndWheelToken));
67+
FlowSession sellerSession = initiateFlow(holder);
68+
TransactionBuilder txBuilder = new TransactionBuilder(NotaryUtilities.getPreferredNotary(getServiceHub()));
69+
MoveTokensUtilities.addMoveNonFungibleTokens(txBuilder, getServiceHub(), frametokenPointer, holder);
70+
MoveTokensUtilities.addMoveNonFungibleTokens(txBuilder, getServiceHub(), wheeltokenPointer, holder);
71+
72+
SignedTransaction ptx = getServiceHub().signInitialTransaction(txBuilder);
73+
SignedTransaction stx = subFlow(new CollectSignaturesFlow(ptx, Collections.singletonList(sellerSession)));
74+
75+
// Update the distribution list
76+
subFlow(new UpdateDistributionListFlow(stx));
77+
SignedTransaction ftx = subFlow(new ObserverAwareFinalityFlow(stx, Collections.singletonList(sellerSession)));
6678

6779
return "\nTransfer ownership of a bike (Frame serial#: "+ this.frameModel + ", Wheels serial#: " + this.wheelsModel + ") to "
6880
+ this.holder.getName().getOrganisation() + "\nTransaction IDs: "
69-
+ stx1.getId() + ", " + stx2.getId();
81+
+ ftx.getId();
7082
}
7183
}
7284

Tokens/bikemarket/workflows/src/main/java/net/corda/examples/bikemarket/flows/TransferPartTokens.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,23 @@
22

33
import co.paralleluniverse.fibers.Suspendable;
44
import com.r3.corda.lib.tokens.contracts.types.TokenPointer;
5+
import com.r3.corda.lib.tokens.workflows.flows.move.MoveTokensUtilities;
56
import com.r3.corda.lib.tokens.workflows.flows.rpc.MoveNonFungibleTokens;
67
import com.r3.corda.lib.tokens.workflows.flows.rpc.MoveNonFungibleTokensHandler;
8+
import com.r3.corda.lib.tokens.workflows.internal.flows.distribution.UpdateDistributionListFlow;
9+
import com.r3.corda.lib.tokens.workflows.internal.flows.finality.ObserverAwareFinalityFlow;
710
import com.r3.corda.lib.tokens.workflows.types.PartyAndToken;
11+
import com.r3.corda.lib.tokens.workflows.utilities.NotaryUtilities;
12+
import net.corda.core.transactions.TransactionBuilder;
813
import net.corda.examples.bikemarket.states.FrameTokenState;
914
import net.corda.examples.bikemarket.states.WheelsTokenState;
1015
import net.corda.core.contracts.StateAndRef;
1116
import net.corda.core.flows.*;
1217
import net.corda.core.identity.Party;
1318
import net.corda.core.transactions.SignedTransaction;
1419

20+
import java.util.Collections;
21+
1522
public class TransferPartTokens {
1623

1724
public TransferPartTokens() {
@@ -52,11 +59,20 @@ public String call() throws FlowException {
5259

5360
//get the pointer to the frame
5461
TokenPointer frametokenPointer = frametokentype.toPointer(frametokentype.getClass());
55-
PartyAndToken partyAndFrameToken = new PartyAndToken(holder, frametokenPointer);
5662

57-
SignedTransaction stx = (SignedTransaction) subFlow(new MoveNonFungibleTokens(partyAndFrameToken));
63+
FlowSession sellerSession = initiateFlow(holder);
64+
TransactionBuilder txBuilder = new TransactionBuilder(NotaryUtilities.getPreferredNotary(getServiceHub()));
65+
MoveTokensUtilities.addMoveNonFungibleTokens(txBuilder, getServiceHub(), frametokenPointer, getOurIdentity());
66+
67+
SignedTransaction ptx = getServiceHub().signInitialTransaction(txBuilder);
68+
SignedTransaction stx = subFlow(new CollectSignaturesFlow(ptx, Collections.singletonList(sellerSession)));
69+
70+
// Update the distribution list
71+
subFlow(new UpdateDistributionListFlow(stx));
72+
SignedTransaction ftx = subFlow(new ObserverAwareFinalityFlow(stx, Collections.singletonList(sellerSession)));
73+
5874
return "Transfer ownership of the frame ("+this.frameModel+") to" +this.holder.getName().getOrganisation()
59-
+ "\nTransaction ID: " + stx.getId();
75+
+ "\nTransaction ID: " + ftx.getId();
6076

6177
} else {
6278
//Step 2: Wheels Token
@@ -70,11 +86,18 @@ public String call() throws FlowException {
7086

7187
//get the pointer to the wheel
7288
TokenPointer wheeltokenPointer = wheeltokentype.toPointer(wheeltokentype.getClass());
73-
PartyAndToken partyAndWheelToken = new PartyAndToken(holder, wheeltokenPointer);
89+
FlowSession sellerSession = initiateFlow(holder);
90+
TransactionBuilder txBuilder = new TransactionBuilder(NotaryUtilities.getPreferredNotary(getServiceHub()));
91+
MoveTokensUtilities.addMoveNonFungibleTokens(txBuilder, getServiceHub(), wheeltokenPointer, getOurIdentity());
92+
93+
SignedTransaction ptx = getServiceHub().signInitialTransaction(txBuilder);
94+
SignedTransaction stx = subFlow(new CollectSignaturesFlow(ptx, Collections.singletonList(sellerSession)));
7495

75-
SignedTransaction stx = (SignedTransaction) subFlow(new MoveNonFungibleTokens(partyAndWheelToken));
96+
// Update the distribution list
97+
subFlow(new UpdateDistributionListFlow(stx));
98+
SignedTransaction ftx = subFlow(new ObserverAwareFinalityFlow(stx, Collections.singletonList(sellerSession)));
7699
return "Transfer ownership of the wheels (" +this.wheelModel+") to" +this.holder.getName().getOrganisation()
77-
+ "\nTransaction ID: " + stx.getId();
100+
+ "\nTransaction ID: " + ftx.getId();
78101
}
79102
}
80103
}

Tokens/constants.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cordaCoreReleaseGroup=net.corda
22
cordaReleaseGroup=net.corda
3-
cordaVersion=4.5-RC02
4-
cordaCoreVersion=4.5-RC02
3+
cordaVersion=4.5
4+
cordaCoreVersion=4.5
55
gradlePluginsVersion=5.0.10
66
kotlinVersion=1.2.71
77
junitVersion=4.12

0 commit comments

Comments
 (0)