Skip to content

Commit 5042099

Browse files
committed
auction revamp
1 parent 1094536 commit 5042099

File tree

17 files changed

+164
-86
lines changed

17 files changed

+164
-86
lines changed

Advanced/auction-cordapp/client/build.gradle

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
apply plugin: 'org.springframework.boot'
22

3-
//sourceSets {
4-
// main {
5-
// resources {
6-
// srcDir rootProject.file("config/dev")
7-
// }
8-
// }
9-
//}
10-
113
dependencies {
124
// Corda dependencies.
135
compile "$corda_release_group:corda-rpc:$corda_release_version"
@@ -33,7 +25,7 @@ dependencies {
3325
}
3426

3527
springBoot {
36-
mainClassName = "net.corda.samples.client.Starter"
28+
mainClassName = "net.corda.samples.auction.client.Starter"
3729
}
3830

3931
task runAuctionClient(type: JavaExec, dependsOn: assemble) {

Advanced/auction-cordapp/client/src/main/java/net/corda/samples/auction/client/Controller.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public APIResponse<Void> createAsset(@RequestBody Forms.AssetForm assetForm){
7171
@PostMapping("create")
7272
public APIResponse<Void> createAuction(@RequestBody Forms.CreateAuctionForm auctionForm){
7373
try {
74-
activeParty.startFlowDynamic(CreateAuctionFlow.Initiator.class,
74+
activeParty.startFlowDynamic(CreateAuctionFlow.CreateAuctionInitiator.class,
7575
Amount.parseCurrency(auctionForm.getBasePrice() + " USD"),
7676
UUID.fromString(auctionForm.getAssetId()),
7777
LocalDateTime.parse(auctionForm.getDeadline(),
@@ -91,7 +91,7 @@ public APIResponse<Void> createAuction(@RequestBody Forms.CreateAuctionForm auct
9191
@PostMapping("delete/{auctionId}")
9292
public APIResponse<Void> deleteAuction(@PathVariable String auctionId){
9393
try {
94-
activeParty.startFlowDynamic(AuctionExitFlow.Initiator.class, UUID.fromString(auctionId)).getReturnValue().get();
94+
activeParty.startFlowDynamic(AuctionExitFlow.AuctionExitInitiator.class, UUID.fromString(auctionId)).getReturnValue().get();
9595
return APIResponse.success();
9696
}catch (ExecutionException e){
9797
if(e.getCause() != null && e.getCause().getClass().equals(TransactionVerificationException.ContractRejection.class)){
@@ -107,7 +107,7 @@ public APIResponse<Void> deleteAuction(@PathVariable String auctionId){
107107
@PostMapping("placeBid")
108108
public APIResponse<Void> placeBid(@RequestBody Forms.BidForm bidForm){
109109
try{
110-
activeParty.startFlowDynamic(BidFlow.Initiator.class,
110+
activeParty.startFlowDynamic(BidFlow.BidInitiator.class,
111111
Amount.parseCurrency(bidForm.getAmount() + " USD"),
112112
UUID.fromString(bidForm.getAuctionId()))
113113
.getReturnValue().get();

Advanced/auction-cordapp/contracts/src/main/java/net/corda/samples/auction/contracts/AuctionContract.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// ************
1313
public class AuctionContract implements Contract {
1414
// This is used to identify our contracts when building a transaction.
15-
public static final String ID = "AuctionContract";
15+
public static final String ID = "net.corda.samples.auction.contracts.AuctionContract";
1616

1717
// A transaction is valid if the verify() function of the contracts of all the transaction's input and output states
1818
// does not throw an exception.

Advanced/auction-cordapp/contracts/src/main/java/net/corda/samples/auction/states/AuctionState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public ScheduledActivity nextScheduledActivity(@NotNull StateRef thisStateRef,
7878
return null;
7979

8080
FlowLogicRef flowLogicRef = flowLogicRefFactory.create(
81-
"net.corda.samples.flows.EndAuctionFlow$Initiator", auctionId);
81+
"net.corda.samples.auction.flows.EndAuctionFlow$EndAuctionInitiator", auctionId);
8282
return new ScheduledActivity(flowLogicRef, bidEndTime);
8383
}
8484

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,94 @@
11
package net.corda.samples.auction.contracts;
22

3+
import net.corda.core.contracts.Amount;
4+
import net.corda.core.identity.CordaX500Name;
5+
import net.corda.samples.auction.states.AuctionState;
6+
import net.corda.testing.core.TestIdentity;
37
import net.corda.testing.node.MockServices;
48
import org.junit.Test;
59

6-
//TODO
10+
import java.util.Arrays;
11+
12+
import static net.corda.testing.node.NodeTestUtils.transaction;
13+
714
public class ContractTests {
8-
private final MockServices ledgerServices = new MockServices();
15+
private final TestIdentity alice = new TestIdentity(new CordaX500Name("Alice", "", "GB"));
16+
private final TestIdentity bob = new TestIdentity(new CordaX500Name("Bob", "", "GB"));
17+
private MockServices ledgerServices = new MockServices(new TestIdentity(new CordaX500Name("TestId", "", "GB")));
18+
919

1020
@Test
11-
public void dummyTest() {
21+
public void testVerifyBid() {
22+
AuctionState input = new AuctionState(null, null, Amount.parseCurrency("100 USD"),
23+
Amount.parseCurrency("200 USD"), null, null, null, true, null,
24+
null, null);
25+
26+
27+
AuctionState input_inactive = new AuctionState(null, null, Amount.parseCurrency("100 USD"),
28+
Amount.parseCurrency("200 USD"), null, null, null, false, null,
29+
null, null);
30+
31+
AuctionState output = new AuctionState(null, null, Amount.parseCurrency("100 USD"),
32+
Amount.parseCurrency("220 USD"), null, null, null, true, null,
33+
null, null);
34+
35+
AuctionState output_lt_basePrice = new AuctionState(null, null, Amount.parseCurrency("100 USD"),
36+
Amount.parseCurrency("80 USD"), null, null, null, true, null,
37+
null, null);
38+
39+
40+
// Should fail auction is inactive
41+
transaction(ledgerServices, tx -> {
42+
tx.input(AuctionContract.ID, input_inactive);
43+
tx.output(AuctionContract.ID, output);
44+
tx.command(Arrays.asList(alice.getPublicKey(), bob.getPublicKey()), new AuctionContract.Commands.Bid());
45+
tx.fails();
46+
return null;
47+
});
48+
49+
50+
// Should fail bid price is less than base price
51+
transaction(ledgerServices, tx -> {
52+
tx.input(AuctionContract.ID, input);
53+
tx.output(AuctionContract.ID, output_lt_basePrice);
54+
tx.command(Arrays.asList(alice.getPublicKey(), bob.getPublicKey()), new AuctionContract.Commands.Bid());
55+
tx.fails();
56+
return null;
57+
});
58+
59+
AuctionState output_lt_highestBid = new AuctionState(null, null, Amount.parseCurrency("100 USD"),
60+
Amount.parseCurrency("180 USD"), null, null, null, true, null,
61+
null, null);
62+
63+
// Should fail bid price is less than previous highest bid
64+
transaction(ledgerServices, tx -> {
65+
tx.input(AuctionContract.ID, input);
66+
tx.output(AuctionContract.ID, output_lt_highestBid);
67+
tx.command(Arrays.asList(alice.getPublicKey(), bob.getPublicKey()), new AuctionContract.Commands.Bid());
68+
tx.fails();
69+
return null;
70+
});
71+
72+
AuctionState output_eq_highestBid = new AuctionState(null, null, Amount.parseCurrency("100 USD"),
73+
Amount.parseCurrency("200 USD"), null, null, null, true, null,
74+
null, null);
75+
76+
// Should fail bid price is equal to previous highest bid
77+
transaction(ledgerServices, tx -> {
78+
tx.input(AuctionContract.ID, input);
79+
tx.output(AuctionContract.ID, output_eq_highestBid);
80+
tx.command(Arrays.asList(alice.getPublicKey(), bob.getPublicKey()), new AuctionContract.Commands.Bid());
81+
tx.fails();
82+
return null;
83+
});
1284

85+
//Should verify
86+
transaction(ledgerServices, tx -> {
87+
tx.input(AuctionContract.ID, input);
88+
tx.output(AuctionContract.ID, output);
89+
tx.command(Arrays.asList(alice.getPublicKey(), bob.getPublicKey()), new AuctionContract.Commands.Bid());
90+
tx.verifies();
91+
return null;
92+
});
1393
}
14-
}
94+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package net.corda.samples.auction.contracts;
2+
3+
import net.corda.core.contracts.UniqueIdentifier;
4+
import net.corda.samples.auction.states.AuctionState;
5+
import net.corda.testing.node.MockServices;
6+
import org.junit.Test;
7+
8+
import java.util.UUID;
9+
10+
public class StateTests {
11+
private final MockServices ledgerServices = new MockServices();
12+
13+
@Test
14+
public void hasFieldOfCorrectType() throws NoSuchFieldException {
15+
// Does the message field exist?
16+
AuctionState.class.getDeclaredField("auctionId");
17+
// Is the message field of the correct type?
18+
assert(AuctionState.class.getDeclaredField("auctionId").getType().equals(UUID.class));
19+
}
20+
}

Advanced/auction-cordapp/contracts/src/test/java/net/corda/samples/auction/states/AssetStateTests.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

Advanced/auction-cordapp/contracts/src/test/java/net/corda/samples/auction/states/AuctionStateTests.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

Advanced/auction-cordapp/workflows/src/integrationTest/java/net/corda/samples/auction/flows/DriverBasedTest.java renamed to Advanced/auction-cordapp/workflows/src/integrationTest/java/net/corda/samples/auction/DriverBasedTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.corda.samples.auction.flows;
1+
package net.corda.samples.auction;
22

33
import com.google.common.collect.ImmutableList;
44
import net.corda.core.concurrent.CordaFuture;

Advanced/auction-cordapp/workflows/src/main/java/net/corda/samples/auction/flows/AuctionDvPFlow.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class AuctionDvPFlow {
2929

3030
@StartableByRPC
3131
@InitiatingFlow
32-
public static class Initiator extends FlowLogic<SignedTransaction>{
32+
public static class AuctionDvPInitiator extends FlowLogic<SignedTransaction>{
3333

3434
private final UUID auctionId;
3535
private final Amount<Currency> payment;
@@ -41,7 +41,7 @@ public static class Initiator extends FlowLogic<SignedTransaction>{
4141
* @param payment is the bid amount which is required to be transferred from the highest bidded to auctioneer to
4242
* settle the auction.
4343
*/
44-
public Initiator(UUID auctionId, Amount<Currency> payment) {
44+
public AuctionDvPInitiator(UUID auctionId, Amount<Currency> payment) {
4545
this.auctionId = auctionId;
4646
this.payment = payment;
4747
}
@@ -124,12 +124,12 @@ public SignedTransaction call() throws FlowException {
124124
}
125125
}
126126

127-
@InitiatedBy(Initiator.class)
128-
public static class Responder extends FlowLogic<SignedTransaction>{
127+
@InitiatedBy(AuctionDvPInitiator.class)
128+
public static class AuctionDvPResponder extends FlowLogic<SignedTransaction>{
129129

130130
private FlowSession otherPartySession;
131131

132-
public Responder(FlowSession otherPartySession) {
132+
public AuctionDvPResponder(FlowSession otherPartySession) {
133133
this.otherPartySession = otherPartySession;
134134
}
135135

0 commit comments

Comments
 (0)