mirror of
https://github.com/corda/corda.git
synced 2025-06-12 20:28:18 +00:00
CORDA-654 Make VaultFiller a class so I can change its hardcoded bits (#2141)
This commit is contained in:
@ -13,7 +13,7 @@ import net.corda.finance.DOLLARS
|
|||||||
import net.corda.finance.`issued by`
|
import net.corda.finance.`issued by`
|
||||||
import net.corda.finance.contracts.asset.*
|
import net.corda.finance.contracts.asset.*
|
||||||
import net.corda.testing.*
|
import net.corda.testing.*
|
||||||
import net.corda.testing.contracts.fillWithSomeTestCash
|
import net.corda.testing.contracts.VaultFiller
|
||||||
import net.corda.testing.node.MockServices
|
import net.corda.testing.node.MockServices
|
||||||
import net.corda.testing.node.MockServices.Companion.makeTestDatabaseAndMockServices
|
import net.corda.testing.node.MockServices.Companion.makeTestDatabaseAndMockServices
|
||||||
import org.junit.Ignore
|
import org.junit.Ignore
|
||||||
@ -240,7 +240,7 @@ class CommercialPaperTestsGeneric {
|
|||||||
aliceVaultService = aliceServices.vaultService
|
aliceVaultService = aliceServices.vaultService
|
||||||
|
|
||||||
databaseAlice.transaction {
|
databaseAlice.transaction {
|
||||||
alicesVault = aliceServices.fillWithSomeTestCash(9000.DOLLARS, issuerServices, atLeastThisManyStates = 1, atMostThisManyStates = 1, issuedBy = DUMMY_CASH_ISSUER)
|
alicesVault = VaultFiller(aliceServices).fillWithSomeTestCash(9000.DOLLARS, issuerServices, atLeastThisManyStates = 1, atMostThisManyStates = 1, issuedBy = DUMMY_CASH_ISSUER)
|
||||||
aliceVaultService = aliceServices.vaultService
|
aliceVaultService = aliceServices.vaultService
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ class CommercialPaperTestsGeneric {
|
|||||||
bigCorpVaultService = bigCorpServices.vaultService
|
bigCorpVaultService = bigCorpServices.vaultService
|
||||||
|
|
||||||
databaseBigCorp.transaction {
|
databaseBigCorp.transaction {
|
||||||
bigCorpVault = bigCorpServices.fillWithSomeTestCash(13000.DOLLARS, issuerServices, atLeastThisManyStates = 1, atMostThisManyStates = 1, issuedBy = DUMMY_CASH_ISSUER)
|
bigCorpVault = VaultFiller(bigCorpServices).fillWithSomeTestCash(13000.DOLLARS, issuerServices, atLeastThisManyStates = 1, atMostThisManyStates = 1, issuedBy = DUMMY_CASH_ISSUER)
|
||||||
bigCorpVaultService = bigCorpServices.vaultService
|
bigCorpVaultService = bigCorpServices.vaultService
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ import net.corda.node.services.vault.NodeVaultService
|
|||||||
import net.corda.node.utilities.CordaPersistence
|
import net.corda.node.utilities.CordaPersistence
|
||||||
import net.corda.testing.*
|
import net.corda.testing.*
|
||||||
import net.corda.testing.contracts.DummyState
|
import net.corda.testing.contracts.DummyState
|
||||||
import net.corda.testing.contracts.fillWithSomeTestCash
|
import net.corda.testing.contracts.VaultFiller
|
||||||
import net.corda.testing.node.MockServices
|
import net.corda.testing.node.MockServices
|
||||||
import net.corda.testing.node.MockServices.Companion.makeTestDatabaseAndMockServices
|
import net.corda.testing.node.MockServices.Companion.makeTestDatabaseAndMockServices
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
@ -81,14 +81,15 @@ class CashTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create some cash. Any attempt to spend >$500 will require multiple issuers to be involved.
|
// Create some cash. Any attempt to spend >$500 will require multiple issuers to be involved.
|
||||||
database.transaction {
|
database.transaction {
|
||||||
ourServices.fillWithSomeTestCash(howMuch = 100.DOLLARS, atLeastThisManyStates = 1, atMostThisManyStates = 1,
|
val vaultFiller = VaultFiller(ourServices)
|
||||||
|
vaultFiller.fillWithSomeTestCash(howMuch = 100.DOLLARS, atLeastThisManyStates = 1, atMostThisManyStates = 1,
|
||||||
owner = ourIdentity, issuedBy = MEGA_CORP.ref(1), issuerServices = megaCorpServices)
|
owner = ourIdentity, issuedBy = MEGA_CORP.ref(1), issuerServices = megaCorpServices)
|
||||||
ourServices.fillWithSomeTestCash(howMuch = 400.DOLLARS, atLeastThisManyStates = 1, atMostThisManyStates = 1,
|
vaultFiller.fillWithSomeTestCash(howMuch = 400.DOLLARS, atLeastThisManyStates = 1, atMostThisManyStates = 1,
|
||||||
owner = ourIdentity, issuedBy = MEGA_CORP.ref(1), issuerServices = megaCorpServices)
|
owner = ourIdentity, issuedBy = MEGA_CORP.ref(1), issuerServices = megaCorpServices)
|
||||||
ourServices.fillWithSomeTestCash(howMuch = 80.DOLLARS, atLeastThisManyStates = 1, atMostThisManyStates = 1,
|
vaultFiller.fillWithSomeTestCash(howMuch = 80.DOLLARS, atLeastThisManyStates = 1, atMostThisManyStates = 1,
|
||||||
owner = ourIdentity, issuedBy = MINI_CORP.ref(1), issuerServices = miniCorpServices)
|
owner = ourIdentity, issuedBy = MINI_CORP.ref(1), issuerServices = miniCorpServices)
|
||||||
ourServices.fillWithSomeTestCash(howMuch = 80.SWISS_FRANCS, atLeastThisManyStates = 1, atMostThisManyStates = 1,
|
vaultFiller.fillWithSomeTestCash(howMuch = 80.SWISS_FRANCS, atLeastThisManyStates = 1, atMostThisManyStates = 1,
|
||||||
owner = ourIdentity, issuedBy = MINI_CORP.ref(1), issuerServices = miniCorpServices)
|
owner = ourIdentity, issuedBy = MINI_CORP.ref(1), issuerServices = miniCorpServices)
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
|
@ -55,7 +55,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
public class VaultQueryJavaTests {
|
public class VaultQueryJavaTests {
|
||||||
@Rule
|
@Rule
|
||||||
public final SerializationEnvironmentRule testSerialization = new SerializationEnvironmentRule();
|
public final SerializationEnvironmentRule testSerialization = new SerializationEnvironmentRule();
|
||||||
private MockServices services;
|
private VaultFiller vaultFiller;
|
||||||
private MockServices issuerServices;
|
private MockServices issuerServices;
|
||||||
private VaultService vaultService;
|
private VaultService vaultService;
|
||||||
private CordaPersistence database;
|
private CordaPersistence database;
|
||||||
@ -73,7 +73,8 @@ public class VaultQueryJavaTests {
|
|||||||
cordappPackages);
|
cordappPackages);
|
||||||
issuerServices = new MockServices(cordappPackages, getDUMMY_CASH_ISSUER_NAME(), getDUMMY_CASH_ISSUER_KEY(), getBOC_KEY());
|
issuerServices = new MockServices(cordappPackages, getDUMMY_CASH_ISSUER_NAME(), getDUMMY_CASH_ISSUER_KEY(), getBOC_KEY());
|
||||||
database = databaseAndServices.getFirst();
|
database = databaseAndServices.getFirst();
|
||||||
services = databaseAndServices.getSecond();
|
MockServices services = databaseAndServices.getSecond();
|
||||||
|
vaultFiller = new VaultFiller(services);
|
||||||
vaultService = services.getVaultService();
|
vaultService = services.getVaultService();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,7 +94,7 @@ public class VaultQueryJavaTests {
|
|||||||
@Test
|
@Test
|
||||||
public void unconsumedLinearStates() throws VaultQueryException {
|
public void unconsumedLinearStates() throws VaultQueryException {
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
VaultFiller.fillWithSomeTestLinearStates(services, 3);
|
vaultFiller.fillWithSomeTestLinearStates(3);
|
||||||
return tx;
|
return tx;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
@ -111,8 +112,8 @@ public class VaultQueryJavaTests {
|
|||||||
public void unconsumedStatesForStateRefsSortedByTxnId() {
|
public void unconsumedStatesForStateRefsSortedByTxnId() {
|
||||||
Vault<LinearState> issuedStates =
|
Vault<LinearState> issuedStates =
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
VaultFiller.fillWithSomeTestLinearStates(services, 8);
|
vaultFiller.fillWithSomeTestLinearStates(8);
|
||||||
return VaultFiller.fillWithSomeTestLinearStates(services, 2);
|
return vaultFiller.fillWithSomeTestLinearStates(2);
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
Stream<StateRef> stateRefsStream = StreamSupport.stream(issuedStates.getStates().spliterator(), false).map(StateAndRef::getRef);
|
Stream<StateRef> stateRefsStream = StreamSupport.stream(issuedStates.getStates().spliterator(), false).map(StateAndRef::getRef);
|
||||||
@ -137,7 +138,7 @@ public class VaultQueryJavaTests {
|
|||||||
public void consumedCashStates() {
|
public void consumedCashStates() {
|
||||||
Amount<Currency> amount = new Amount<>(100, Currency.getInstance("USD"));
|
Amount<Currency> amount = new Amount<>(100, Currency.getInstance("USD"));
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
VaultFiller.fillWithSomeTestCash(services,
|
vaultFiller.fillWithSomeTestCash(
|
||||||
new Amount<Currency>(100, Currency.getInstance("USD")),
|
new Amount<Currency>(100, Currency.getInstance("USD")),
|
||||||
issuerServices,
|
issuerServices,
|
||||||
TestConstants.getDUMMY_NOTARY(),
|
TestConstants.getDUMMY_NOTARY(),
|
||||||
@ -149,7 +150,7 @@ public class VaultQueryJavaTests {
|
|||||||
return tx;
|
return tx;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
VaultFiller.consumeCash(services, amount, getDUMMY_NOTARY());
|
vaultFiller.consumeCash(amount, getDUMMY_NOTARY());
|
||||||
return tx;
|
return tx;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
@ -170,17 +171,16 @@ public class VaultQueryJavaTests {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Triple<StateAndRef<LinearState>, UniqueIdentifier, Vault<DealState>> ids =
|
Triple<StateAndRef<LinearState>, UniqueIdentifier, Vault<DealState>> ids =
|
||||||
database.transaction((DatabaseTransaction tx) -> {
|
database.transaction((DatabaseTransaction tx) -> {
|
||||||
Vault<LinearState> states = VaultFiller.fillWithSomeTestLinearStates(services, 10, null);
|
Vault<LinearState> states = vaultFiller.fillWithSomeTestLinearStates(10, null);
|
||||||
StateAndRef<LinearState> linearState = states.getStates().iterator().next();
|
StateAndRef<LinearState> linearState = states.getStates().iterator().next();
|
||||||
UniqueIdentifier uid = linearState.component1().getData().getLinearId();
|
UniqueIdentifier uid = linearState.component1().getData().getLinearId();
|
||||||
|
Vault<DealState> dealStates = vaultFiller.fillWithSomeTestDeals(dealIds);
|
||||||
Vault<DealState> dealStates = VaultFiller.fillWithSomeTestDeals(services, dealIds);
|
|
||||||
return new Triple(linearState, uid, dealStates);
|
return new Triple(linearState, uid, dealStates);
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
// consume states
|
// consume states
|
||||||
VaultFiller.consumeDeals(services, (List<? extends StateAndRef<? extends DealState>>) ids.getThird().getStates(), getDUMMY_NOTARY());
|
vaultFiller.consumeDeals((List<? extends StateAndRef<? extends DealState>>) ids.getThird().getStates(), getDUMMY_NOTARY());
|
||||||
VaultFiller.consumeLinearStates(services, Collections.singletonList(ids.getFirst()), getDUMMY_NOTARY());
|
vaultFiller.consumeLinearStates(Collections.singletonList(ids.getFirst()), getDUMMY_NOTARY());
|
||||||
return tx;
|
return tx;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
@ -219,11 +219,10 @@ public class VaultQueryJavaTests {
|
|||||||
Amount<Currency> dollars100 = new Amount<>(100, Currency.getInstance("USD"));
|
Amount<Currency> dollars100 = new Amount<>(100, Currency.getInstance("USD"));
|
||||||
Amount<Currency> dollars10 = new Amount<>(10, Currency.getInstance("USD"));
|
Amount<Currency> dollars10 = new Amount<>(10, Currency.getInstance("USD"));
|
||||||
Amount<Currency> dollars1 = new Amount<>(1, Currency.getInstance("USD"));
|
Amount<Currency> dollars1 = new Amount<>(1, Currency.getInstance("USD"));
|
||||||
|
vaultFiller.fillWithSomeTestCash(pounds, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, pounds, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(dollars100, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars100, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(dollars10, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars10, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(dollars1, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars1, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
|
||||||
return tx;
|
return tx;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
@ -260,7 +259,7 @@ public class VaultQueryJavaTests {
|
|||||||
@Test
|
@Test
|
||||||
public void trackCashStates() {
|
public void trackCashStates() {
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
VaultFiller.fillWithSomeTestCash(services,
|
vaultFiller.fillWithSomeTestCash(
|
||||||
new Amount<>(100, Currency.getInstance("USD")),
|
new Amount<>(100, Currency.getInstance("USD")),
|
||||||
issuerServices,
|
issuerServices,
|
||||||
TestConstants.getDUMMY_NOTARY(),
|
TestConstants.getDUMMY_NOTARY(),
|
||||||
@ -294,10 +293,9 @@ public class VaultQueryJavaTests {
|
|||||||
List<String> dealIds = Arrays.asList("123", "456", "789");
|
List<String> dealIds = Arrays.asList("123", "456", "789");
|
||||||
UniqueIdentifier uid =
|
UniqueIdentifier uid =
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
Vault<LinearState> states = VaultFiller.fillWithSomeTestLinearStates(services, 10, null);
|
Vault<LinearState> states = vaultFiller.fillWithSomeTestLinearStates(10, null);
|
||||||
UniqueIdentifier _uid = states.getStates().iterator().next().component1().getData().getLinearId();
|
UniqueIdentifier _uid = states.getStates().iterator().next().component1().getData().getLinearId();
|
||||||
|
vaultFiller.fillWithSomeTestDeals(dealIds);
|
||||||
VaultFiller.fillWithSomeTestDeals(services, dealIds);
|
|
||||||
return _uid;
|
return _uid;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
@ -341,13 +339,11 @@ public class VaultQueryJavaTests {
|
|||||||
Amount<Currency> dollars300 = new Amount<>(300, Currency.getInstance("USD"));
|
Amount<Currency> dollars300 = new Amount<>(300, Currency.getInstance("USD"));
|
||||||
Amount<Currency> pounds = new Amount<>(400, Currency.getInstance("GBP"));
|
Amount<Currency> pounds = new Amount<>(400, Currency.getInstance("GBP"));
|
||||||
Amount<Currency> swissfrancs = new Amount<>(500, Currency.getInstance("CHF"));
|
Amount<Currency> swissfrancs = new Amount<>(500, Currency.getInstance("CHF"));
|
||||||
|
vaultFiller.fillWithSomeTestCash(dollars100, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars100, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(dollars200, issuerServices, TestConstants.getDUMMY_NOTARY(), 2, 2, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars200, issuerServices, TestConstants.getDUMMY_NOTARY(), 2, 2, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(dollars300, issuerServices, TestConstants.getDUMMY_NOTARY(), 3, 3, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars300, issuerServices, TestConstants.getDUMMY_NOTARY(), 3, 3, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(pounds, issuerServices, TestConstants.getDUMMY_NOTARY(), 4, 4, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, pounds, issuerServices, TestConstants.getDUMMY_NOTARY(), 4, 4, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(swissfrancs, issuerServices, TestConstants.getDUMMY_NOTARY(), 5, 5, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, swissfrancs, issuerServices, TestConstants.getDUMMY_NOTARY(), 5, 5, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
|
||||||
|
|
||||||
return tx;
|
return tx;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
@ -389,13 +385,11 @@ public class VaultQueryJavaTests {
|
|||||||
Amount<Currency> dollars300 = new Amount<>(300, Currency.getInstance("USD"));
|
Amount<Currency> dollars300 = new Amount<>(300, Currency.getInstance("USD"));
|
||||||
Amount<Currency> pounds = new Amount<>(400, Currency.getInstance("GBP"));
|
Amount<Currency> pounds = new Amount<>(400, Currency.getInstance("GBP"));
|
||||||
Amount<Currency> swissfrancs = new Amount<>(500, Currency.getInstance("CHF"));
|
Amount<Currency> swissfrancs = new Amount<>(500, Currency.getInstance("CHF"));
|
||||||
|
vaultFiller.fillWithSomeTestCash(dollars100, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars100, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(dollars200, issuerServices, TestConstants.getDUMMY_NOTARY(), 2, 2, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars200, issuerServices, TestConstants.getDUMMY_NOTARY(), 2, 2, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(dollars300, issuerServices, TestConstants.getDUMMY_NOTARY(), 3, 3, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars300, issuerServices, TestConstants.getDUMMY_NOTARY(), 3, 3, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(pounds, issuerServices, TestConstants.getDUMMY_NOTARY(), 4, 4, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, pounds, issuerServices, TestConstants.getDUMMY_NOTARY(), 4, 4, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(swissfrancs, issuerServices, TestConstants.getDUMMY_NOTARY(), 5, 5, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, swissfrancs, issuerServices, TestConstants.getDUMMY_NOTARY(), 5, 5, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
|
||||||
|
|
||||||
return tx;
|
return tx;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
@ -452,12 +446,10 @@ public class VaultQueryJavaTests {
|
|||||||
Amount<Currency> dollars200 = new Amount<>(200, Currency.getInstance("USD"));
|
Amount<Currency> dollars200 = new Amount<>(200, Currency.getInstance("USD"));
|
||||||
Amount<Currency> pounds300 = new Amount<>(300, Currency.getInstance("GBP"));
|
Amount<Currency> pounds300 = new Amount<>(300, Currency.getInstance("GBP"));
|
||||||
Amount<Currency> pounds400 = new Amount<>(400, Currency.getInstance("GBP"));
|
Amount<Currency> pounds400 = new Amount<>(400, Currency.getInstance("GBP"));
|
||||||
|
vaultFiller.fillWithSomeTestCash(dollars100, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars100, issuerServices, TestConstants.getDUMMY_NOTARY(), 1, 1, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(dollars200, issuerServices, TestConstants.getDUMMY_NOTARY(), 2, 2, new Random(0L), null, getBOC().ref(new OpaqueBytes("1".getBytes())));
|
||||||
VaultFiller.fillWithSomeTestCash(services, dollars200, issuerServices, TestConstants.getDUMMY_NOTARY(), 2, 2, new Random(0L), null, getBOC().ref(new OpaqueBytes("1".getBytes())));
|
vaultFiller.fillWithSomeTestCash(pounds300, issuerServices, TestConstants.getDUMMY_NOTARY(), 3, 3, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
||||||
VaultFiller.fillWithSomeTestCash(services, pounds300, issuerServices, TestConstants.getDUMMY_NOTARY(), 3, 3, new Random(0L), null, getDUMMY_CASH_ISSUER());
|
vaultFiller.fillWithSomeTestCash(pounds400, issuerServices, TestConstants.getDUMMY_NOTARY(), 4, 4, new Random(0L), null, getBOC().ref(new OpaqueBytes("1".getBytes())));
|
||||||
VaultFiller.fillWithSomeTestCash(services, pounds400, issuerServices, TestConstants.getDUMMY_NOTARY(), 4, 4, new Random(0L), null, getBOC().ref(new OpaqueBytes("1".getBytes())));
|
|
||||||
|
|
||||||
return tx;
|
return tx;
|
||||||
});
|
});
|
||||||
database.transaction(tx -> {
|
database.transaction(tx -> {
|
||||||
|
@ -38,7 +38,7 @@ import net.corda.node.services.persistence.DBTransactionStorage
|
|||||||
import net.corda.node.services.persistence.checkpoints
|
import net.corda.node.services.persistence.checkpoints
|
||||||
import net.corda.node.utilities.CordaPersistence
|
import net.corda.node.utilities.CordaPersistence
|
||||||
import net.corda.testing.*
|
import net.corda.testing.*
|
||||||
import net.corda.testing.contracts.fillWithSomeTestCash
|
import net.corda.testing.contracts.VaultFiller
|
||||||
import net.corda.testing.node.*
|
import net.corda.testing.node.*
|
||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
@ -106,7 +106,7 @@ class TwoPartyTradeFlowTests(private val anonymous: Boolean) {
|
|||||||
bobNode.internals.disableDBCloseOnStop()
|
bobNode.internals.disableDBCloseOnStop()
|
||||||
|
|
||||||
bobNode.database.transaction {
|
bobNode.database.transaction {
|
||||||
bobNode.services.fillWithSomeTestCash(2000.DOLLARS, bankNode.services, outputNotary = notary,
|
VaultFiller(bobNode.services).fillWithSomeTestCash(2000.DOLLARS, bankNode.services, outputNotary = notary,
|
||||||
issuedBy = cashIssuer)
|
issuedBy = cashIssuer)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ class TwoPartyTradeFlowTests(private val anonymous: Boolean) {
|
|||||||
bobNode.internals.disableDBCloseOnStop()
|
bobNode.internals.disableDBCloseOnStop()
|
||||||
|
|
||||||
val cashStates = bobNode.database.transaction {
|
val cashStates = bobNode.database.transaction {
|
||||||
bobNode.services.fillWithSomeTestCash(2000.DOLLARS, bankNode.services, notary, 3, 3,
|
VaultFiller(bobNode.services).fillWithSomeTestCash(2000.DOLLARS, bankNode.services, notary, 3, 3,
|
||||||
issuedBy = issuer)
|
issuedBy = issuer)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ class TwoPartyTradeFlowTests(private val anonymous: Boolean) {
|
|||||||
val issuer = bank.ref(1, 2, 3)
|
val issuer = bank.ref(1, 2, 3)
|
||||||
|
|
||||||
bobNode.database.transaction {
|
bobNode.database.transaction {
|
||||||
bobNode.services.fillWithSomeTestCash(2000.DOLLARS, bankNode.services, outputNotary = notary,
|
VaultFiller(bobNode.services).fillWithSomeTestCash(2000.DOLLARS, bankNode.services, outputNotary = notary,
|
||||||
issuedBy = issuer)
|
issuedBy = issuer)
|
||||||
}
|
}
|
||||||
val alicesFakePaper = aliceNode.database.transaction {
|
val alicesFakePaper = aliceNode.database.transaction {
|
||||||
|
@ -33,10 +33,7 @@ import net.corda.node.services.vault.VaultSchemaV1
|
|||||||
import net.corda.node.utilities.CordaPersistence
|
import net.corda.node.utilities.CordaPersistence
|
||||||
import net.corda.node.utilities.configureDatabase
|
import net.corda.node.utilities.configureDatabase
|
||||||
import net.corda.testing.*
|
import net.corda.testing.*
|
||||||
import net.corda.testing.contracts.consumeCash
|
import net.corda.testing.contracts.*
|
||||||
import net.corda.testing.contracts.fillWithSomeTestCash
|
|
||||||
import net.corda.testing.contracts.fillWithSomeTestDeals
|
|
||||||
import net.corda.testing.contracts.fillWithSomeTestLinearStates
|
|
||||||
import net.corda.testing.node.MockServices
|
import net.corda.testing.node.MockServices
|
||||||
import net.corda.testing.node.MockServices.Companion.makeTestDataSourceProperties
|
import net.corda.testing.node.MockServices.Companion.makeTestDataSourceProperties
|
||||||
import net.corda.testing.schemas.DummyLinearStateSchemaV1
|
import net.corda.testing.schemas.DummyLinearStateSchemaV1
|
||||||
@ -57,6 +54,7 @@ class HibernateConfigurationTest {
|
|||||||
@JvmField
|
@JvmField
|
||||||
val testSerialization = SerializationEnvironmentRule()
|
val testSerialization = SerializationEnvironmentRule()
|
||||||
lateinit var services: MockServices
|
lateinit var services: MockServices
|
||||||
|
private lateinit var vaultFiller: VaultFiller
|
||||||
lateinit var bankServices: MockServices
|
lateinit var bankServices: MockServices
|
||||||
lateinit var issuerServices: MockServices
|
lateinit var issuerServices: MockServices
|
||||||
lateinit var notaryServices: MockServices
|
lateinit var notaryServices: MockServices
|
||||||
@ -108,6 +106,7 @@ class HibernateConfigurationTest {
|
|||||||
|
|
||||||
override fun jdbcSession() = database.createSession()
|
override fun jdbcSession() = database.createSession()
|
||||||
}
|
}
|
||||||
|
vaultFiller = VaultFiller(services)
|
||||||
hibernatePersister = services.hibernatePersister
|
hibernatePersister = services.hibernatePersister
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +116,7 @@ class HibernateConfigurationTest {
|
|||||||
|
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val numStates = 10
|
val numStates = 10
|
||||||
cashStates = services.fillWithSomeTestCash(100.DOLLARS, issuerServices, notary, numStates, numStates, Random(0L), issuedBy = issuer.ref(1))
|
cashStates = vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, notary, numStates, numStates, Random(0L), issuedBy = issuer.ref(1))
|
||||||
.states.toList()
|
.states.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +147,7 @@ class HibernateConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `consumed states`() {
|
fun `consumed states`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.consumeCash(50.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(50.DOLLARS, notary = notary)
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -160,7 +159,7 @@ class HibernateConfigurationTest {
|
|||||||
// execute query
|
// execute query
|
||||||
val queryResults = entityManager.createQuery(criteriaQuery).resultList
|
val queryResults = entityManager.createQuery(criteriaQuery).resultList
|
||||||
val coins = queryResults.map {
|
val coins = queryResults.map {
|
||||||
(services.loadState(toStateRef(it.stateRef!!)) as TransactionState<Cash.State>).data
|
services.loadState(toStateRef(it.stateRef!!)).data
|
||||||
}.sumCash()
|
}.sumCash()
|
||||||
assertThat(coins.toDecimal() >= BigDecimal("50.00"))
|
assertThat(coins.toDecimal() >= BigDecimal("50.00"))
|
||||||
}
|
}
|
||||||
@ -169,8 +168,8 @@ class HibernateConfigurationTest {
|
|||||||
fun `select by composite primary key`() {
|
fun `select by composite primary key`() {
|
||||||
val issuedStates =
|
val issuedStates =
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(8)
|
vaultFiller.fillWithSomeTestLinearStates(8)
|
||||||
services.fillWithSomeTestLinearStates(2)
|
vaultFiller.fillWithSomeTestLinearStates(2)
|
||||||
}
|
}
|
||||||
val persistentStateRefs = issuedStates.states.map { PersistentStateRef(it.ref) }.toList()
|
val persistentStateRefs = issuedStates.states.map { PersistentStateRef(it.ref) }.toList()
|
||||||
|
|
||||||
@ -194,8 +193,8 @@ class HibernateConfigurationTest {
|
|||||||
fun `distinct contract types`() {
|
fun `distinct contract types`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
// add 2 more contract types
|
// add 2 more contract types
|
||||||
services.fillWithSomeTestLinearStates(10)
|
vaultFiller.fillWithSomeTestLinearStates(10)
|
||||||
services.fillWithSomeTestDeals(listOf("123", "456", "789"))
|
vaultFiller.fillWithSomeTestDeals(listOf("123", "456", "789"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -229,11 +228,11 @@ class HibernateConfigurationTest {
|
|||||||
fun `with sorting by state ref desc and asc`() {
|
fun `with sorting by state ref desc and asc`() {
|
||||||
// generate additional state ref indexes
|
// generate additional state ref indexes
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.consumeCash(1.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(1.DOLLARS, notary = notary)
|
||||||
services.consumeCash(2.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(2.DOLLARS, notary = notary)
|
||||||
services.consumeCash(3.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(3.DOLLARS, notary = notary)
|
||||||
services.consumeCash(4.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(4.DOLLARS, notary = notary)
|
||||||
services.consumeCash(5.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(5.DOLLARS, notary = notary)
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -259,11 +258,11 @@ class HibernateConfigurationTest {
|
|||||||
fun `with sorting by state ref index and txId desc and asc`() {
|
fun `with sorting by state ref index and txId desc and asc`() {
|
||||||
// generate additional state ref indexes
|
// generate additional state ref indexes
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.consumeCash(1.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(1.DOLLARS, notary = notary)
|
||||||
services.consumeCash(2.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(2.DOLLARS, notary = notary)
|
||||||
services.consumeCash(3.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(3.DOLLARS, notary = notary)
|
||||||
services.consumeCash(4.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(4.DOLLARS, notary = notary)
|
||||||
services.consumeCash(5.DOLLARS, notary = notary)
|
vaultFiller.consumeCash(5.DOLLARS, notary = notary)
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -290,7 +289,7 @@ class HibernateConfigurationTest {
|
|||||||
fun `with pagination`() {
|
fun `with pagination`() {
|
||||||
// add 100 additional cash entries
|
// add 100 additional cash entries
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(1000.POUNDS, issuerServices, notary, 100, 100, Random(0L), issuedBy = issuer.ref(1))
|
vaultFiller.fillWithSomeTestCash(1000.POUNDS, issuerServices, notary, 100, 100, Random(0L), issuedBy = issuer.ref(1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -321,7 +320,7 @@ class HibernateConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `select by composite primary key on LinearStates`() {
|
fun `select by composite primary key on LinearStates`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(10)
|
vaultFiller.fillWithSomeTestLinearStates(10)
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -372,8 +371,7 @@ class HibernateConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `select and join by composite primary key on CashStates`() {
|
fun `select and join by composite primary key on CashStates`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(5)
|
vaultFiller.fillWithSomeTestLinearStates(5)
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
val criteriaQuery = criteriaBuilder.createQuery(VaultSchemaV1.VaultStates::class.java)
|
val criteriaQuery = criteriaBuilder.createQuery(VaultSchemaV1.VaultStates::class.java)
|
||||||
val vaultStates = criteriaQuery.from(VaultSchemaV1.VaultStates::class.java)
|
val vaultStates = criteriaQuery.from(VaultSchemaV1.VaultStates::class.java)
|
||||||
@ -391,12 +389,11 @@ class HibernateConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `calculate cash balances`() {
|
fun `calculate cash balances`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, notary, 10, issuer.ref(1)) // +$100 = $200
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, notary, 10, issuer.ref(1)) // +$100 = $200
|
vaultFiller.fillWithSomeTestCash(50.POUNDS, issuerServices, notary, 5, issuer.ref(1)) // £50 = £50
|
||||||
services.fillWithSomeTestCash(50.POUNDS, issuerServices, notary, 5, issuer.ref(1)) // £50 = £50
|
vaultFiller.fillWithSomeTestCash(25.POUNDS, issuerServices, notary, 5, issuer.ref(1)) // +£25 = £175
|
||||||
services.fillWithSomeTestCash(25.POUNDS, issuerServices, notary, 5, issuer.ref(1)) // +£25 = £175
|
vaultFiller.fillWithSomeTestCash(500.SWISS_FRANCS, issuerServices, notary, 10, issuer.ref(1)) // CHF500 = CHF500
|
||||||
services.fillWithSomeTestCash(500.SWISS_FRANCS, issuerServices, notary, 10, issuer.ref(1)) // CHF500 = CHF500
|
vaultFiller.fillWithSomeTestCash(250.SWISS_FRANCS, issuerServices, notary, 5, issuer.ref(1)) // +CHF250 = CHF750
|
||||||
services.fillWithSomeTestCash(250.SWISS_FRANCS, issuerServices, notary, 5, issuer.ref(1)) // +CHF250 = CHF750
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -425,8 +422,8 @@ class HibernateConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `calculate cash balance for single currency`() {
|
fun `calculate cash balance for single currency`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(50.POUNDS, issuerServices, notary, 5, issuer.ref(1)) // £50 = £50
|
vaultFiller.fillWithSomeTestCash(50.POUNDS, issuerServices, notary, 5, issuer.ref(1)) // £50 = £50
|
||||||
services.fillWithSomeTestCash(25.POUNDS, issuerServices, notary, 5, issuer.ref(1)) // +£25 = £175
|
vaultFiller.fillWithSomeTestCash(25.POUNDS, issuerServices, notary, 5, issuer.ref(1)) // +£25 = £175
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -456,9 +453,9 @@ class HibernateConfigurationTest {
|
|||||||
fun `calculate and order by cash balance for owner and currency`() {
|
fun `calculate and order by cash balance for owner and currency`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val bank = bankServices.myInfo.legalIdentities.single()
|
val bank = bankServices.myInfo.legalIdentities.single()
|
||||||
services.fillWithSomeTestCash(200.DOLLARS, bankServices, notary, 2, bank.ref(1))
|
vaultFiller.fillWithSomeTestCash(200.DOLLARS, bankServices, notary, 2, bank.ref(1))
|
||||||
services.fillWithSomeTestCash(300.POUNDS, issuerServices, notary, 3, issuer.ref(1))
|
vaultFiller.fillWithSomeTestCash(300.POUNDS, issuerServices, notary, 3, issuer.ref(1))
|
||||||
services.fillWithSomeTestCash(400.POUNDS, bankServices, notary, 4, bank.ref(2))
|
vaultFiller.fillWithSomeTestCash(400.POUNDS, bankServices, notary, 4, bank.ref(2))
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure query
|
// structure query
|
||||||
@ -518,8 +515,7 @@ class HibernateConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `select by composite primary key on CashStates in V2`() {
|
fun `select by composite primary key on CashStates in V2`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(5)
|
vaultFiller.fillWithSomeTestLinearStates(5)
|
||||||
|
|
||||||
// persist cash states explicitly with V2 schema
|
// persist cash states explicitly with V2 schema
|
||||||
cashStates.forEach {
|
cashStates.forEach {
|
||||||
val cashState = it.state.data
|
val cashState = it.state.data
|
||||||
@ -554,9 +550,9 @@ class HibernateConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `select by composite primary between VaultStates, VaultLinearStates and DummyLinearStates`() {
|
fun `select by composite primary between VaultStates, VaultLinearStates and DummyLinearStates`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(8)
|
vaultFiller.fillWithSomeTestLinearStates(8)
|
||||||
services.fillWithSomeTestDeals(listOf("123", "456", "789"))
|
vaultFiller.fillWithSomeTestDeals(listOf("123", "456", "789"))
|
||||||
services.fillWithSomeTestLinearStates(2)
|
vaultFiller.fillWithSomeTestLinearStates(2)
|
||||||
}
|
}
|
||||||
val sessionFactory = sessionFactoryForSchemas(VaultSchemaV1, DummyLinearStateSchemaV1)
|
val sessionFactory = sessionFactoryForSchemas(VaultSchemaV1, DummyLinearStateSchemaV1)
|
||||||
val criteriaBuilder = sessionFactory.criteriaBuilder
|
val criteriaBuilder = sessionFactory.criteriaBuilder
|
||||||
@ -585,9 +581,9 @@ class HibernateConfigurationTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `three way join by composite primary between VaultStates, VaultLinearStates and DummyLinearStates`() {
|
fun `three way join by composite primary between VaultStates, VaultLinearStates and DummyLinearStates`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(8)
|
vaultFiller.fillWithSomeTestLinearStates(8)
|
||||||
services.fillWithSomeTestDeals(listOf("123", "456", "789"))
|
vaultFiller.fillWithSomeTestDeals(listOf("123", "456", "789"))
|
||||||
services.fillWithSomeTestLinearStates(2)
|
vaultFiller.fillWithSomeTestLinearStates(2)
|
||||||
}
|
}
|
||||||
val sessionFactory = sessionFactoryForSchemas(VaultSchemaV1, DummyLinearStateSchemaV2)
|
val sessionFactory = sessionFactoryForSchemas(VaultSchemaV1, DummyLinearStateSchemaV2)
|
||||||
val criteriaBuilder = sessionFactory.criteriaBuilder
|
val criteriaBuilder = sessionFactory.criteriaBuilder
|
||||||
@ -644,10 +640,9 @@ class HibernateConfigurationTest {
|
|||||||
val dummyFungibleState = DummyFungibleContract.State(cashState.amount, cashState.owner)
|
val dummyFungibleState = DummyFungibleContract.State(cashState.amount, cashState.owner)
|
||||||
hibernatePersister.persistStateWithSchema(dummyFungibleState, it.ref, SampleCashSchemaV3)
|
hibernatePersister.persistStateWithSchema(dummyFungibleState, it.ref, SampleCashSchemaV3)
|
||||||
}
|
}
|
||||||
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, notary, 2, 2, Random(0L),
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, notary, 2, 2, Random(0L),
|
|
||||||
issuedBy = issuer.ref(1), owner = ALICE)
|
issuedBy = issuer.ref(1), owner = ALICE)
|
||||||
val cashStates = services.fillWithSomeTestCash(100.DOLLARS, services, notary, 2, identity.ref(0)).states
|
val cashStates = vaultFiller.fillWithSomeTestCash(100.DOLLARS, services, notary, 2, identity.ref(0)).states
|
||||||
// persist additional cash states explicitly with V3 schema
|
// persist additional cash states explicitly with V3 schema
|
||||||
cashStates.forEach {
|
cashStates.forEach {
|
||||||
val cashState = it.state.data
|
val cashState = it.state.data
|
||||||
@ -723,8 +718,7 @@ class HibernateConfigurationTest {
|
|||||||
val dummyFungibleState = DummyFungibleContract.State(cashState.amount, cashState.owner)
|
val dummyFungibleState = DummyFungibleContract.State(cashState.amount, cashState.owner)
|
||||||
hibernatePersister.persistStateWithSchema(dummyFungibleState, it.ref, SampleCashSchemaV3)
|
hibernatePersister.persistStateWithSchema(dummyFungibleState, it.ref, SampleCashSchemaV3)
|
||||||
}
|
}
|
||||||
|
val moreCash = vaultFiller.fillWithSomeTestCash(100.DOLLARS, services, notary, 2, 2, Random(0L),
|
||||||
val moreCash = services.fillWithSomeTestCash(100.DOLLARS, services, notary, 2, 2, Random(0L),
|
|
||||||
issuedBy = identity.ref(0), owner = identity).states
|
issuedBy = identity.ref(0), owner = identity).states
|
||||||
// persist additional cash states explicitly with V3 schema
|
// persist additional cash states explicitly with V3 schema
|
||||||
moreCash.forEach {
|
moreCash.forEach {
|
||||||
@ -732,8 +726,7 @@ class HibernateConfigurationTest {
|
|||||||
val dummyFungibleState = DummyFungibleContract.State(cashState.amount, cashState.owner)
|
val dummyFungibleState = DummyFungibleContract.State(cashState.amount, cashState.owner)
|
||||||
hibernatePersister.persistStateWithSchema(dummyFungibleState, it.ref, SampleCashSchemaV3)
|
hibernatePersister.persistStateWithSchema(dummyFungibleState, it.ref, SampleCashSchemaV3)
|
||||||
}
|
}
|
||||||
|
val cashStates = vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, notary, 2, 2, Random(0L), owner = ALICE, issuedBy = issuer.ref(1)).states
|
||||||
val cashStates = services.fillWithSomeTestCash(100.DOLLARS, issuerServices, notary, 2, 2, Random(0L), owner = ALICE, issuedBy = issuer.ref(1)).states
|
|
||||||
// persist additional cash states explicitly with V3 schema
|
// persist additional cash states explicitly with V3 schema
|
||||||
cashStates.forEach {
|
cashStates.forEach {
|
||||||
val cashState = it.state.data
|
val cashState = it.state.data
|
||||||
@ -777,9 +770,9 @@ class HibernateConfigurationTest {
|
|||||||
fun `with sorting on attribute from common table`() {
|
fun `with sorting on attribute from common table`() {
|
||||||
|
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(1, externalId = "111")
|
vaultFiller.fillWithSomeTestLinearStates(1, externalId = "111")
|
||||||
services.fillWithSomeTestLinearStates(2, externalId = "222")
|
vaultFiller.fillWithSomeTestLinearStates(2, externalId = "222")
|
||||||
services.fillWithSomeTestLinearStates(3, externalId = "333")
|
vaultFiller.fillWithSomeTestLinearStates(3, externalId = "333")
|
||||||
}
|
}
|
||||||
val sessionFactory = sessionFactoryForSchemas(VaultSchemaV1, DummyLinearStateSchemaV2)
|
val sessionFactory = sessionFactoryForSchemas(VaultSchemaV1, DummyLinearStateSchemaV2)
|
||||||
val criteriaBuilder = sessionFactory.criteriaBuilder
|
val criteriaBuilder = sessionFactory.criteriaBuilder
|
||||||
@ -829,9 +822,9 @@ class HibernateConfigurationTest {
|
|||||||
fun `with sorting on attribute from custom table`() {
|
fun `with sorting on attribute from custom table`() {
|
||||||
|
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(1, externalId = "111")
|
vaultFiller.fillWithSomeTestLinearStates(1, externalId = "111")
|
||||||
services.fillWithSomeTestLinearStates(2, externalId = "222")
|
vaultFiller.fillWithSomeTestLinearStates(2, externalId = "222")
|
||||||
services.fillWithSomeTestLinearStates(3, externalId = "333")
|
vaultFiller.fillWithSomeTestLinearStates(3, externalId = "333")
|
||||||
}
|
}
|
||||||
val sessionFactory = sessionFactoryForSchemas(VaultSchemaV1, DummyLinearStateSchemaV1)
|
val sessionFactory = sessionFactoryForSchemas(VaultSchemaV1, DummyLinearStateSchemaV1)
|
||||||
val criteriaBuilder = sessionFactory.criteriaBuilder
|
val criteriaBuilder = sessionFactory.criteriaBuilder
|
||||||
|
@ -36,7 +36,7 @@ import net.corda.finance.schemas.CashSchemaV1
|
|||||||
import net.corda.finance.utils.sumCash
|
import net.corda.finance.utils.sumCash
|
||||||
import net.corda.node.utilities.CordaPersistence
|
import net.corda.node.utilities.CordaPersistence
|
||||||
import net.corda.testing.*
|
import net.corda.testing.*
|
||||||
import net.corda.testing.contracts.fillWithSomeTestCash
|
import net.corda.testing.contracts.VaultFiller
|
||||||
import net.corda.testing.node.MockServices
|
import net.corda.testing.node.MockServices
|
||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.assertj.core.api.Assertions.assertThatExceptionOfType
|
import org.assertj.core.api.Assertions.assertThatExceptionOfType
|
||||||
@ -62,6 +62,7 @@ class NodeVaultServiceTest {
|
|||||||
@JvmField
|
@JvmField
|
||||||
val testSerialization = SerializationEnvironmentRule()
|
val testSerialization = SerializationEnvironmentRule()
|
||||||
private lateinit var services: MockServices
|
private lateinit var services: MockServices
|
||||||
|
private lateinit var vaultFiller: VaultFiller
|
||||||
private lateinit var identity: PartyAndCertificate
|
private lateinit var identity: PartyAndCertificate
|
||||||
private lateinit var issuerServices: MockServices
|
private lateinit var issuerServices: MockServices
|
||||||
private lateinit var bocServices: MockServices
|
private lateinit var bocServices: MockServices
|
||||||
@ -74,6 +75,7 @@ class NodeVaultServiceTest {
|
|||||||
val databaseAndServices = MockServices.makeTestDatabaseAndMockServices(cordappPackages = cordappPackages)
|
val databaseAndServices = MockServices.makeTestDatabaseAndMockServices(cordappPackages = cordappPackages)
|
||||||
database = databaseAndServices.first
|
database = databaseAndServices.first
|
||||||
services = databaseAndServices.second
|
services = databaseAndServices.second
|
||||||
|
vaultFiller = VaultFiller(services)
|
||||||
// This is safe because MockServices only ever have a single identity
|
// This is safe because MockServices only ever have a single identity
|
||||||
identity = services.myInfo.singleIdentityAndCert()
|
identity = services.myInfo.singleIdentityAndCert()
|
||||||
issuerServices = MockServices(cordappPackages, DUMMY_CASH_ISSUER_NAME, DUMMY_CASH_ISSUER_KEY)
|
issuerServices = MockServices(cordappPackages, DUMMY_CASH_ISSUER_NAME, DUMMY_CASH_ISSUER_KEY)
|
||||||
@ -111,7 +113,7 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `states not local to instance`() {
|
fun `states not local to instance`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val w1 = vaultService.queryBy<Cash.State>().states
|
val w1 = vaultService.queryBy<Cash.State>().states
|
||||||
@ -136,7 +138,7 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `states for refs`() {
|
fun `states for refs`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val w1 = vaultService.queryBy<Cash.State>().states
|
val w1 = vaultService.queryBy<Cash.State>().states
|
||||||
@ -150,7 +152,7 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `states soft locking reserve and release`() {
|
fun `states soft locking reserve and release`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
|
|
||||||
@ -203,7 +205,7 @@ class NodeVaultServiceTest {
|
|||||||
val vaultStates =
|
val vaultStates =
|
||||||
database.transaction {
|
database.transaction {
|
||||||
assertEquals(0.DOLLARS, services.getCashBalance(USD))
|
assertEquals(0.DOLLARS, services.getCashBalance(USD))
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
||||||
}
|
}
|
||||||
val stateRefsToSoftLock = (vaultStates.states.map { it.ref }).toNonEmptySet()
|
val stateRefsToSoftLock = (vaultStates.states.map { it.ref }).toNonEmptySet()
|
||||||
println("State Refs:: $stateRefsToSoftLock")
|
println("State Refs:: $stateRefsToSoftLock")
|
||||||
@ -258,7 +260,7 @@ class NodeVaultServiceTest {
|
|||||||
val vaultStates =
|
val vaultStates =
|
||||||
database.transaction {
|
database.transaction {
|
||||||
assertEquals(0.DOLLARS, services.getCashBalance(USD))
|
assertEquals(0.DOLLARS, services.getCashBalance(USD))
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
||||||
}
|
}
|
||||||
val stateRefsToSoftLock = vaultStates.states.map { it.ref }
|
val stateRefsToSoftLock = vaultStates.states.map { it.ref }
|
||||||
println("State Refs:: $stateRefsToSoftLock")
|
println("State Refs:: $stateRefsToSoftLock")
|
||||||
@ -286,7 +288,7 @@ class NodeVaultServiceTest {
|
|||||||
val vaultStates =
|
val vaultStates =
|
||||||
database.transaction {
|
database.transaction {
|
||||||
assertEquals(0.DOLLARS, services.getCashBalance(USD))
|
assertEquals(0.DOLLARS, services.getCashBalance(USD))
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
||||||
}
|
}
|
||||||
val stateRefsToSoftLock = (vaultStates.states.map { it.ref }).toNonEmptySet()
|
val stateRefsToSoftLock = (vaultStates.states.map { it.ref }).toNonEmptySet()
|
||||||
println("State Refs:: $stateRefsToSoftLock")
|
println("State Refs:: $stateRefsToSoftLock")
|
||||||
@ -313,7 +315,7 @@ class NodeVaultServiceTest {
|
|||||||
val vaultStates =
|
val vaultStates =
|
||||||
database.transaction {
|
database.transaction {
|
||||||
assertEquals(0.DOLLARS, services.getCashBalance(USD))
|
assertEquals(0.DOLLARS, services.getCashBalance(USD))
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L))
|
||||||
}
|
}
|
||||||
val stateRefsToSoftLock = vaultStates.states.map { it.ref }
|
val stateRefsToSoftLock = vaultStates.states.map { it.ref }
|
||||||
println("State Refs:: $stateRefsToSoftLock")
|
println("State Refs:: $stateRefsToSoftLock")
|
||||||
@ -334,7 +336,7 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `unconsumedStatesForSpending exact amount`() {
|
fun `unconsumedStatesForSpending exact amount`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
|
|
||||||
@ -353,8 +355,8 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `unconsumedStatesForSpending from two issuer parties`() {
|
fun `unconsumedStatesForSpending from two issuer parties`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = DUMMY_CASH_ISSUER)
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = DUMMY_CASH_ISSUER)
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, bocServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = BOC.ref(1))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, bocServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = BOC.ref(1))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val spendableStatesUSD = vaultService.unconsumedCashStatesForSpending(200.DOLLARS,
|
val spendableStatesUSD = vaultService.unconsumedCashStatesForSpending(200.DOLLARS,
|
||||||
@ -370,10 +372,10 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `unconsumedStatesForSpending from specific issuer party and refs`() {
|
fun `unconsumedStatesForSpending from specific issuer party and refs`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = DUMMY_CASH_ISSUER)
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = DUMMY_CASH_ISSUER)
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, bocServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = BOC.ref(1))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, bocServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = BOC.ref(1))
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, bocServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = BOC.ref(2))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, bocServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = BOC.ref(2))
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, bocServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = BOC.ref(3))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, bocServices, DUMMY_NOTARY, 1, 1, Random(0L), issuedBy = BOC.ref(3))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val unconsumedStates = vaultService.queryBy<Cash.State>().states
|
val unconsumedStates = vaultService.queryBy<Cash.State>().states
|
||||||
@ -392,7 +394,7 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `unconsumedStatesForSpending insufficient amount`() {
|
fun `unconsumedStatesForSpending insufficient amount`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val unconsumedStates = vaultService.queryBy<Cash.State>().states
|
val unconsumedStates = vaultService.queryBy<Cash.State>().states
|
||||||
@ -409,7 +411,7 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `unconsumedStatesForSpending small amount`() {
|
fun `unconsumedStatesForSpending small amount`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 2, 2, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 2, 2, Random(0L))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val unconsumedStates = vaultService.queryBy<Cash.State>().states
|
val unconsumedStates = vaultService.queryBy<Cash.State>().states
|
||||||
@ -427,9 +429,9 @@ class NodeVaultServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `states soft locking query granularity`() {
|
fun `states soft locking query granularity`() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 10, 10, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 10, 10, Random(0L))
|
||||||
services.fillWithSomeTestCash(100.POUNDS, issuerServices, DUMMY_NOTARY, 10, 10, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.POUNDS, issuerServices, DUMMY_NOTARY, 10, 10, Random(0L))
|
||||||
services.fillWithSomeTestCash(100.SWISS_FRANCS, issuerServices, DUMMY_NOTARY, 10, 10, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.SWISS_FRANCS, issuerServices, DUMMY_NOTARY, 10, 10, Random(0L))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
var unlockedStates = 30
|
var unlockedStates = 30
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -51,6 +51,7 @@ class VaultWithCashTest {
|
|||||||
@JvmField
|
@JvmField
|
||||||
val testSerialization = SerializationEnvironmentRule(true)
|
val testSerialization = SerializationEnvironmentRule(true)
|
||||||
lateinit var services: MockServices
|
lateinit var services: MockServices
|
||||||
|
private lateinit var vaultFiller: VaultFiller
|
||||||
lateinit var issuerServices: MockServices
|
lateinit var issuerServices: MockServices
|
||||||
val vaultService: VaultService get() = services.vaultService
|
val vaultService: VaultService get() = services.vaultService
|
||||||
lateinit var database: CordaPersistence
|
lateinit var database: CordaPersistence
|
||||||
@ -63,6 +64,7 @@ class VaultWithCashTest {
|
|||||||
val databaseAndServices = makeTestDatabaseAndMockServices(cordappPackages = cordappPackages, keys = listOf(generateKeyPair(), DUMMY_NOTARY_KEY))
|
val databaseAndServices = makeTestDatabaseAndMockServices(cordappPackages = cordappPackages, keys = listOf(generateKeyPair(), DUMMY_NOTARY_KEY))
|
||||||
database = databaseAndServices.first
|
database = databaseAndServices.first
|
||||||
services = databaseAndServices.second
|
services = databaseAndServices.second
|
||||||
|
vaultFiller = VaultFiller(services)
|
||||||
issuerServices = MockServices(cordappPackages, DUMMY_CASH_ISSUER_NAME, DUMMY_CASH_ISSUER_KEY, MEGA_CORP_KEY)
|
issuerServices = MockServices(cordappPackages, DUMMY_CASH_ISSUER_NAME, DUMMY_CASH_ISSUER_KEY, MEGA_CORP_KEY)
|
||||||
notaryServices = MockServices(cordappPackages, DUMMY_NOTARY.name, DUMMY_NOTARY_KEY)
|
notaryServices = MockServices(cordappPackages, DUMMY_NOTARY.name, DUMMY_NOTARY_KEY)
|
||||||
notary = notaryServices.myInfo.legalIdentitiesAndCerts.single().party
|
notary = notaryServices.myInfo.legalIdentitiesAndCerts.single().party
|
||||||
@ -78,7 +80,7 @@ class VaultWithCashTest {
|
|||||||
fun splits() {
|
fun splits() {
|
||||||
database.transaction {
|
database.transaction {
|
||||||
// Fix the PRNG so that we get the same splits every time.
|
// Fix the PRNG so that we get the same splits every time.
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L), issuedBy = DUMMY_CASH_ISSUER)
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L), issuedBy = DUMMY_CASH_ISSUER)
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val w = vaultService.queryBy<Cash.State>().states
|
val w = vaultService.queryBy<Cash.State>().states
|
||||||
@ -148,7 +150,7 @@ class VaultWithCashTest {
|
|||||||
|
|
||||||
database.transaction {
|
database.transaction {
|
||||||
// A tx that sends us money.
|
// A tx that sends us money.
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 10, 10, Random(0L), owner = AnonymousParty(freshKey),
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 10, 10, Random(0L), owner = AnonymousParty(freshKey),
|
||||||
issuedBy = MEGA_CORP.ref(1))
|
issuedBy = MEGA_CORP.ref(1))
|
||||||
println("Cash balance: ${services.getCashBalance(USD)}")
|
println("Cash balance: ${services.getCashBalance(USD)}")
|
||||||
}
|
}
|
||||||
@ -298,16 +300,16 @@ class VaultWithCashTest {
|
|||||||
|
|
||||||
val freshKey = services.keyManagementService.freshKey()
|
val freshKey = services.keyManagementService.freshKey()
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L), owner = AnonymousParty(freshKey))
|
vaultFiller.fillWithSomeTestCash(100.DOLLARS, issuerServices, DUMMY_NOTARY, 3, 3, Random(0L), owner = AnonymousParty(freshKey))
|
||||||
services.fillWithSomeTestCash(100.SWISS_FRANCS, issuerServices, DUMMY_NOTARY, 2, 2, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.SWISS_FRANCS, issuerServices, DUMMY_NOTARY, 2, 2, Random(0L))
|
||||||
services.fillWithSomeTestCash(100.POUNDS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L))
|
vaultFiller.fillWithSomeTestCash(100.POUNDS, issuerServices, DUMMY_NOTARY, 1, 1, Random(0L))
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val cash = vaultService.queryBy<Cash.State>().states
|
val cash = vaultService.queryBy<Cash.State>().states
|
||||||
cash.forEach { println(it.state.data.amount) }
|
cash.forEach { println(it.state.data.amount) }
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestDeals(listOf("123", "456", "789"), issuerServices)
|
vaultFiller.fillWithSomeTestDeals(listOf("123", "456", "789"), issuerServices)
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val deals = vaultService.queryBy<DummyDealContract.State>().states
|
val deals = vaultService.queryBy<DummyDealContract.State>().states
|
||||||
@ -337,14 +339,14 @@ class VaultWithCashTest {
|
|||||||
val freshKey = services.keyManagementService.freshKey()
|
val freshKey = services.keyManagementService.freshKey()
|
||||||
val freshIdentity = AnonymousParty(freshKey)
|
val freshIdentity = AnonymousParty(freshKey)
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestDeals(listOf("123", "456", "789"), issuerServices)
|
vaultFiller.fillWithSomeTestDeals(listOf("123", "456", "789"), issuerServices)
|
||||||
}
|
}
|
||||||
val deals =
|
val deals =
|
||||||
database.transaction {
|
database.transaction {
|
||||||
vaultService.queryBy<DummyDealContract.State>().states
|
vaultService.queryBy<DummyDealContract.State>().states
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
services.fillWithSomeTestLinearStates(3)
|
vaultFiller.fillWithSomeTestLinearStates(3)
|
||||||
}
|
}
|
||||||
database.transaction {
|
database.transaction {
|
||||||
val linearStates = vaultService.queryBy<DummyLinearContract.State>().states
|
val linearStates = vaultService.queryBy<DummyLinearContract.State>().states
|
||||||
|
@ -18,7 +18,7 @@ import net.corda.finance.contracts.getCashBalance
|
|||||||
import net.corda.finance.flows.CashIssueFlow
|
import net.corda.finance.flows.CashIssueFlow
|
||||||
import net.corda.finance.flows.CashPaymentFlow
|
import net.corda.finance.flows.CashPaymentFlow
|
||||||
import net.corda.node.services.vault.VaultSchemaV1
|
import net.corda.node.services.vault.VaultSchemaV1
|
||||||
import net.corda.testing.contracts.calculateRandomlySizedAmounts
|
import net.corda.testing.contracts.VaultFiller.Companion.calculateRandomlySizedAmounts
|
||||||
import net.corda.traderdemo.flow.CommercialPaperIssueFlow
|
import net.corda.traderdemo.flow.CommercialPaperIssueFlow
|
||||||
import net.corda.traderdemo.flow.SellerFlow
|
import net.corda.traderdemo.flow.SellerFlow
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -29,255 +29,238 @@ import java.time.Instant
|
|||||||
import java.time.Instant.now
|
import java.time.Instant.now
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@JvmOverloads
|
class VaultFiller(private val services: ServiceHub) {
|
||||||
fun ServiceHub.fillWithSomeTestDeals(dealIds: List<String>,
|
companion object {
|
||||||
issuerServices: ServiceHub = this,
|
fun calculateRandomlySizedAmounts(howMuch: Amount<Currency>, min: Int, max: Int, rng: Random): LongArray {
|
||||||
|
val numSlots = min + Math.floor(rng.nextDouble() * (max - min)).toInt()
|
||||||
|
val baseSize = howMuch.quantity / numSlots
|
||||||
|
check(baseSize > 0) { baseSize }
|
||||||
|
|
||||||
|
val amounts = LongArray(numSlots) { baseSize }
|
||||||
|
var distanceFromGoal = 0L
|
||||||
|
// If we want 10 slots then max adjust is 0.1, so even if all random numbers come out to the largest downward
|
||||||
|
// adjustment possible, the last slot ends at zero. With 20 slots, max adjust is 0.05 etc.
|
||||||
|
val maxAdjust = 1.0 / numSlots
|
||||||
|
for (i in amounts.indices) {
|
||||||
|
if (i != amounts.lastIndex) {
|
||||||
|
val adjustBy = rng.nextDouble() * maxAdjust - (maxAdjust / 2)
|
||||||
|
val adjustment = (1 + adjustBy)
|
||||||
|
val adjustTo = (amounts[i] * adjustment).toLong()
|
||||||
|
amounts[i] = adjustTo
|
||||||
|
distanceFromGoal += baseSize - adjustTo
|
||||||
|
} else {
|
||||||
|
amounts[i] += distanceFromGoal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The desired amount may not have divided equally to start with, so adjust the first value to make up.
|
||||||
|
amounts[0] += howMuch.quantity - amounts.sum()
|
||||||
|
|
||||||
|
return amounts
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmOverloads
|
||||||
|
fun fillWithSomeTestDeals(dealIds: List<String>,
|
||||||
|
issuerServices: ServiceHub = services,
|
||||||
|
participants: List<AbstractParty> = emptyList(),
|
||||||
|
notary: Party = DUMMY_NOTARY): Vault<DealState> {
|
||||||
|
val myKey: PublicKey = services.myInfo.chooseIdentity().owningKey
|
||||||
|
val me = AnonymousParty(myKey)
|
||||||
|
|
||||||
|
val transactions: List<SignedTransaction> = dealIds.map {
|
||||||
|
// Issue a deal state
|
||||||
|
val dummyIssue = TransactionBuilder(notary = notary).apply {
|
||||||
|
addOutputState(DummyDealContract.State(ref = it, participants = participants.plus(me)), DUMMY_DEAL_PROGRAM_ID)
|
||||||
|
addCommand(dummyCommand())
|
||||||
|
}
|
||||||
|
val stx = issuerServices.signInitialTransaction(dummyIssue)
|
||||||
|
return@map services.addSignature(stx, notary.owningKey)
|
||||||
|
}
|
||||||
|
services.recordTransactions(transactions)
|
||||||
|
// Get all the StateAndRefs of all the generated transactions.
|
||||||
|
val states = transactions.flatMap { stx ->
|
||||||
|
stx.tx.outputs.indices.map { i -> stx.tx.outRef<DealState>(i) }
|
||||||
|
}
|
||||||
|
|
||||||
|
return Vault(states)
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmOverloads
|
||||||
|
fun fillWithSomeTestLinearStates(numberToCreate: Int,
|
||||||
|
externalId: String? = null,
|
||||||
participants: List<AbstractParty> = emptyList(),
|
participants: List<AbstractParty> = emptyList(),
|
||||||
notary: Party = DUMMY_NOTARY): Vault<DealState> {
|
linearString: String = "",
|
||||||
val myKey: PublicKey = myInfo.chooseIdentity().owningKey
|
linearNumber: Long = 0L,
|
||||||
val me = AnonymousParty(myKey)
|
linearBoolean: Boolean = false,
|
||||||
|
linearTimestamp: Instant = now()): Vault<LinearState> {
|
||||||
val transactions: List<SignedTransaction> = dealIds.map {
|
val myKey: PublicKey = services.myInfo.chooseIdentity().owningKey
|
||||||
// Issue a deal state
|
val me = AnonymousParty(myKey)
|
||||||
val dummyIssue = TransactionBuilder(notary = notary).apply {
|
val issuerKey = DUMMY_NOTARY_KEY
|
||||||
addOutputState(DummyDealContract.State(ref = it, participants = participants.plus(me)), DUMMY_DEAL_PROGRAM_ID)
|
val signatureMetadata = SignatureMetadata(services.myInfo.platformVersion, Crypto.findSignatureScheme(issuerKey.public).schemeNumberID)
|
||||||
addCommand(dummyCommand())
|
val transactions: List<SignedTransaction> = (1..numberToCreate).map {
|
||||||
|
// Issue a Linear state
|
||||||
|
val dummyIssue = TransactionBuilder(notary = DUMMY_NOTARY).apply {
|
||||||
|
addOutputState(DummyLinearContract.State(
|
||||||
|
linearId = UniqueIdentifier(externalId),
|
||||||
|
participants = participants.plus(me),
|
||||||
|
linearString = linearString,
|
||||||
|
linearNumber = linearNumber,
|
||||||
|
linearBoolean = linearBoolean,
|
||||||
|
linearTimestamp = linearTimestamp), DUMMY_LINEAR_CONTRACT_PROGRAM_ID)
|
||||||
|
addCommand(dummyCommand())
|
||||||
|
}
|
||||||
|
return@map services.signInitialTransaction(dummyIssue).withAdditionalSignature(issuerKey, signatureMetadata)
|
||||||
}
|
}
|
||||||
val stx = issuerServices.signInitialTransaction(dummyIssue)
|
services.recordTransactions(transactions)
|
||||||
return@map addSignature(stx, notary.owningKey)
|
// Get all the StateAndRefs of all the generated transactions.
|
||||||
}
|
val states = transactions.flatMap { stx ->
|
||||||
|
stx.tx.outputs.indices.map { i -> stx.tx.outRef<LinearState>(i) }
|
||||||
recordTransactions(transactions)
|
|
||||||
|
|
||||||
// Get all the StateAndRefs of all the generated transactions.
|
|
||||||
val states = transactions.flatMap { stx ->
|
|
||||||
stx.tx.outputs.indices.map { i -> stx.tx.outRef<DealState>(i) }
|
|
||||||
}
|
|
||||||
|
|
||||||
return Vault(states)
|
|
||||||
}
|
|
||||||
|
|
||||||
@JvmOverloads
|
|
||||||
fun ServiceHub.fillWithSomeTestLinearStates(numberToCreate: Int,
|
|
||||||
externalId: String? = null,
|
|
||||||
participants: List<AbstractParty> = emptyList(),
|
|
||||||
linearString: String = "",
|
|
||||||
linearNumber: Long = 0L,
|
|
||||||
linearBoolean: Boolean = false,
|
|
||||||
linearTimestamp: Instant = now()): Vault<LinearState> {
|
|
||||||
val myKey: PublicKey = myInfo.chooseIdentity().owningKey
|
|
||||||
val me = AnonymousParty(myKey)
|
|
||||||
val issuerKey = DUMMY_NOTARY_KEY
|
|
||||||
val signatureMetadata = SignatureMetadata(myInfo.platformVersion, Crypto.findSignatureScheme(issuerKey.public).schemeNumberID)
|
|
||||||
|
|
||||||
val transactions: List<SignedTransaction> = (1..numberToCreate).map {
|
|
||||||
// Issue a Linear state
|
|
||||||
val dummyIssue = TransactionBuilder(notary = DUMMY_NOTARY).apply {
|
|
||||||
addOutputState(DummyLinearContract.State(
|
|
||||||
linearId = UniqueIdentifier(externalId),
|
|
||||||
participants = participants.plus(me),
|
|
||||||
linearString = linearString,
|
|
||||||
linearNumber = linearNumber,
|
|
||||||
linearBoolean = linearBoolean,
|
|
||||||
linearTimestamp = linearTimestamp), DUMMY_LINEAR_CONTRACT_PROGRAM_ID)
|
|
||||||
addCommand(dummyCommand())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return@map signInitialTransaction(dummyIssue).withAdditionalSignature(issuerKey, signatureMetadata)
|
return Vault(states)
|
||||||
}
|
}
|
||||||
|
|
||||||
recordTransactions(transactions)
|
/**
|
||||||
|
* Creates a random set of cash states that add up to the given amount and adds them to the vault. This is intended for
|
||||||
|
* unit tests. The cash is owned by the legal identity key from the storage service.
|
||||||
|
*
|
||||||
|
* The service hub needs to provide at least a key management service and a storage service.
|
||||||
|
*
|
||||||
|
* @param issuerServices service hub of the issuer node, which will be used to sign the transaction.
|
||||||
|
* @param outputNotary the notary to use for output states. The transaction is NOT signed by this notary.
|
||||||
|
* @return a vault object that represents the generated states (it will NOT be the full vault from the service hub!).
|
||||||
|
*/
|
||||||
|
fun fillWithSomeTestCash(howMuch: Amount<Currency>,
|
||||||
|
issuerServices: ServiceHub,
|
||||||
|
outputNotary: Party,
|
||||||
|
states: Int,
|
||||||
|
issuedBy: PartyAndReference): Vault<Cash.State>
|
||||||
|
= fillWithSomeTestCash(howMuch, issuerServices, outputNotary, states, states, issuedBy = issuedBy)
|
||||||
|
|
||||||
// Get all the StateAndRefs of all the generated transactions.
|
/**
|
||||||
val states = transactions.flatMap { stx ->
|
* Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them
|
||||||
stx.tx.outputs.indices.map { i -> stx.tx.outRef<LinearState>(i) }
|
* to the vault. This is intended for unit tests. By default the cash is issued by [DUMMY_CASH_ISSUER] and owned by the legal
|
||||||
|
* identity key from the storage service.
|
||||||
|
*
|
||||||
|
* The service hub needs to provide at least a key management service and a storage service.
|
||||||
|
*
|
||||||
|
* @param issuerServices service hub of the issuer node, which will be used to sign the transaction.
|
||||||
|
* @param outputNotary the notary to use for output states. The transaction is NOT signed by this notary.
|
||||||
|
* @return a vault object that represents the generated states (it will NOT be the full vault from the service hub!).
|
||||||
|
*/
|
||||||
|
fun fillWithSomeTestCash(howMuch: Amount<Currency>,
|
||||||
|
issuerServices: ServiceHub = services,
|
||||||
|
outputNotary: Party = DUMMY_NOTARY,
|
||||||
|
atLeastThisManyStates: Int = 3,
|
||||||
|
atMostThisManyStates: Int = 10,
|
||||||
|
rng: Random = Random(),
|
||||||
|
owner: AbstractParty? = null,
|
||||||
|
issuedBy: PartyAndReference = DUMMY_CASH_ISSUER): Vault<Cash.State> {
|
||||||
|
val amounts = calculateRandomlySizedAmounts(howMuch, atLeastThisManyStates, atMostThisManyStates, rng)
|
||||||
|
|
||||||
|
// We will allocate one state to one transaction, for simplicities sake.
|
||||||
|
val cash = Cash()
|
||||||
|
val transactions: List<SignedTransaction> = amounts.map { pennies ->
|
||||||
|
val issuance = TransactionBuilder(null as Party?)
|
||||||
|
cash.generateIssue(issuance, Amount(pennies, Issued(issuedBy, howMuch.token)), owner ?: services.myInfo.singleIdentity(), outputNotary)
|
||||||
|
return@map issuerServices.signInitialTransaction(issuance, issuedBy.party.owningKey)
|
||||||
|
}
|
||||||
|
services.recordTransactions(transactions)
|
||||||
|
// Get all the StateRefs of all the generated transactions.
|
||||||
|
val states = transactions.flatMap { stx ->
|
||||||
|
stx.tx.outputs.indices.map { i -> stx.tx.outRef<Cash.State>(i) }
|
||||||
|
}
|
||||||
|
|
||||||
|
return Vault(states)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Vault(states)
|
/**
|
||||||
}
|
*
|
||||||
|
* @param issuerServices service hub of the issuer node, which will be used to sign the transaction.
|
||||||
|
* @param outputNotary the notary to use for output states. The transaction is NOT signed by this notary.
|
||||||
|
* @return a vault object that represents the generated states (it will NOT be the full vault from the service hub!).
|
||||||
|
*/
|
||||||
|
// TODO: need to make all FungibleAsset commands (issue, move, exit) generic
|
||||||
|
fun fillWithSomeTestCommodity(amount: Amount<Commodity>,
|
||||||
|
issuerServices: ServiceHub = services,
|
||||||
|
outputNotary: Party = DUMMY_NOTARY,
|
||||||
|
ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })),
|
||||||
|
ownedBy: AbstractParty? = null,
|
||||||
|
issuedBy: PartyAndReference = DUMMY_OBLIGATION_ISSUER.ref(1)): Vault<CommodityContract.State> {
|
||||||
|
val myKey: PublicKey = ownedBy?.owningKey ?: services.myInfo.chooseIdentity().owningKey
|
||||||
|
val me = AnonymousParty(myKey)
|
||||||
|
|
||||||
/**
|
val commodity = CommodityContract()
|
||||||
* Creates a random set of cash states that add up to the given amount and adds them to the vault. This is intended for
|
|
||||||
* unit tests. The cash is owned by the legal identity key from the storage service.
|
|
||||||
*
|
|
||||||
* The service hub needs to provide at least a key management service and a storage service.
|
|
||||||
*
|
|
||||||
* @param issuerServices service hub of the issuer node, which will be used to sign the transaction.
|
|
||||||
* @param outputNotary the notary to use for output states. The transaction is NOT signed by this notary.
|
|
||||||
* @return a vault object that represents the generated states (it will NOT be the full vault from the service hub!).
|
|
||||||
*/
|
|
||||||
fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>,
|
|
||||||
issuerServices: ServiceHub,
|
|
||||||
outputNotary: Party,
|
|
||||||
states: Int,
|
|
||||||
issuedBy: PartyAndReference): Vault<Cash.State>
|
|
||||||
= fillWithSomeTestCash(howMuch, issuerServices, outputNotary, states, states, issuedBy = issuedBy)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them
|
|
||||||
* to the vault. This is intended for unit tests. By default the cash is issued by [DUMMY_CASH_ISSUER] and owned by the legal
|
|
||||||
* identity key from the storage service.
|
|
||||||
*
|
|
||||||
* The service hub needs to provide at least a key management service and a storage service.
|
|
||||||
*
|
|
||||||
* @param issuerServices service hub of the issuer node, which will be used to sign the transaction.
|
|
||||||
* @param outputNotary the notary to use for output states. The transaction is NOT signed by this notary.
|
|
||||||
* @return a vault object that represents the generated states (it will NOT be the full vault from the service hub!).
|
|
||||||
*/
|
|
||||||
fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>,
|
|
||||||
issuerServices: ServiceHub = this,
|
|
||||||
outputNotary: Party = DUMMY_NOTARY,
|
|
||||||
atLeastThisManyStates: Int = 3,
|
|
||||||
atMostThisManyStates: Int = 10,
|
|
||||||
rng: Random = Random(),
|
|
||||||
owner: AbstractParty? = null,
|
|
||||||
issuedBy: PartyAndReference = DUMMY_CASH_ISSUER): Vault<Cash.State> {
|
|
||||||
val amounts = calculateRandomlySizedAmounts(howMuch, atLeastThisManyStates, atMostThisManyStates, rng)
|
|
||||||
|
|
||||||
// We will allocate one state to one transaction, for simplicities sake.
|
|
||||||
val cash = Cash()
|
|
||||||
val transactions: List<SignedTransaction> = amounts.map { pennies ->
|
|
||||||
val issuance = TransactionBuilder(null as Party?)
|
val issuance = TransactionBuilder(null as Party?)
|
||||||
cash.generateIssue(issuance, Amount(pennies, Issued(issuedBy, howMuch.token)),owner ?: myInfo.singleIdentity(), outputNotary)
|
commodity.generateIssue(issuance, Amount(amount.quantity, Issued(issuedBy.copy(reference = ref), amount.token)), me, outputNotary)
|
||||||
|
val transaction = issuerServices.signInitialTransaction(issuance, issuedBy.party.owningKey)
|
||||||
return@map issuerServices.signInitialTransaction(issuance, issuedBy.party.owningKey)
|
services.recordTransactions(transaction)
|
||||||
|
return Vault(setOf(transaction.tx.outRef(0)))
|
||||||
}
|
}
|
||||||
|
|
||||||
recordTransactions(transactions)
|
fun <T : LinearState> consume(states: List<StateAndRef<T>>, notary: Party) {
|
||||||
|
// Create a txn consuming different contract types
|
||||||
// Get all the StateRefs of all the generated transactions.
|
states.forEach {
|
||||||
val states = transactions.flatMap { stx ->
|
val builder = TransactionBuilder(notary = notary).apply {
|
||||||
stx.tx.outputs.indices.map { i -> stx.tx.outRef<Cash.State>(i) }
|
addInputState(it)
|
||||||
}
|
addCommand(dummyCommand(notary.owningKey))
|
||||||
|
}
|
||||||
return Vault(states)
|
val consumedTx = services.signInitialTransaction(builder, notary.owningKey)
|
||||||
}
|
services.recordTransactions(consumedTx)
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param issuerServices service hub of the issuer node, which will be used to sign the transaction.
|
|
||||||
* @param outputNotary the notary to use for output states. The transaction is NOT signed by this notary.
|
|
||||||
* @return a vault object that represents the generated states (it will NOT be the full vault from the service hub!).
|
|
||||||
*/
|
|
||||||
// TODO: need to make all FungibleAsset commands (issue, move, exit) generic
|
|
||||||
fun ServiceHub.fillWithSomeTestCommodity(amount: Amount<Commodity>,
|
|
||||||
issuerServices: ServiceHub = this,
|
|
||||||
outputNotary: Party = DUMMY_NOTARY,
|
|
||||||
ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })),
|
|
||||||
ownedBy: AbstractParty? = null,
|
|
||||||
issuedBy: PartyAndReference = DUMMY_OBLIGATION_ISSUER.ref(1)): Vault<CommodityContract.State> {
|
|
||||||
val myKey: PublicKey = ownedBy?.owningKey ?: myInfo.chooseIdentity().owningKey
|
|
||||||
val me = AnonymousParty(myKey)
|
|
||||||
|
|
||||||
val commodity = CommodityContract()
|
|
||||||
val issuance = TransactionBuilder(null as Party?)
|
|
||||||
commodity.generateIssue(issuance, Amount(amount.quantity, Issued(issuedBy.copy(reference = ref), amount.token)), me, outputNotary)
|
|
||||||
val transaction = issuerServices.signInitialTransaction(issuance, issuedBy.party.owningKey)
|
|
||||||
|
|
||||||
recordTransactions(transaction)
|
|
||||||
|
|
||||||
return Vault(setOf(transaction.tx.outRef<CommodityContract.State>(0)))
|
|
||||||
}
|
|
||||||
|
|
||||||
fun calculateRandomlySizedAmounts(howMuch: Amount<Currency>, min: Int, max: Int, rng: Random): LongArray {
|
|
||||||
val numSlots = min + Math.floor(rng.nextDouble() * (max - min)).toInt()
|
|
||||||
val baseSize = howMuch.quantity / numSlots
|
|
||||||
check(baseSize > 0) { baseSize }
|
|
||||||
|
|
||||||
val amounts = LongArray(numSlots) { baseSize }
|
|
||||||
var distanceFromGoal = 0L
|
|
||||||
// If we want 10 slots then max adjust is 0.1, so even if all random numbers come out to the largest downward
|
|
||||||
// adjustment possible, the last slot ends at zero. With 20 slots, max adjust is 0.05 etc.
|
|
||||||
val maxAdjust = 1.0 / numSlots
|
|
||||||
for (i in amounts.indices) {
|
|
||||||
if (i != amounts.lastIndex) {
|
|
||||||
val adjustBy = rng.nextDouble() * maxAdjust - (maxAdjust / 2)
|
|
||||||
val adjustment = (1 + adjustBy)
|
|
||||||
val adjustTo = (amounts[i] * adjustment).toLong()
|
|
||||||
amounts[i] = adjustTo
|
|
||||||
distanceFromGoal += baseSize - adjustTo
|
|
||||||
} else {
|
|
||||||
amounts[i] += distanceFromGoal
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The desired amount may not have divided equally to start with, so adjust the first value to make up.
|
private fun <T : LinearState> consumeAndProduce(stateAndRef: StateAndRef<T>, notary: Party): StateAndRef<T> {
|
||||||
amounts[0] += howMuch.quantity - amounts.sum()
|
// Create a txn consuming different contract types
|
||||||
|
var builder = TransactionBuilder(notary = notary).apply {
|
||||||
return amounts
|
addInputState(stateAndRef)
|
||||||
}
|
|
||||||
|
|
||||||
fun <T : LinearState> ServiceHub.consume(states: List<StateAndRef<T>>, notary: Party) {
|
|
||||||
// Create a txn consuming different contract types
|
|
||||||
states.forEach {
|
|
||||||
val builder = TransactionBuilder(notary = notary).apply {
|
|
||||||
addInputState(it)
|
|
||||||
addCommand(dummyCommand(notary.owningKey))
|
addCommand(dummyCommand(notary.owningKey))
|
||||||
}
|
}
|
||||||
val consumedTx = signInitialTransaction(builder, notary.owningKey)
|
val consumedTx = services.signInitialTransaction(builder, notary.owningKey)
|
||||||
|
services.recordTransactions(consumedTx)
|
||||||
|
// Create a txn consuming different contract types
|
||||||
|
builder = TransactionBuilder(notary = notary).apply {
|
||||||
|
addOutputState(DummyLinearContract.State(linearId = stateAndRef.state.data.linearId,
|
||||||
|
participants = stateAndRef.state.data.participants), DUMMY_LINEAR_CONTRACT_PROGRAM_ID)
|
||||||
|
addCommand(dummyCommand(notary.owningKey))
|
||||||
|
}
|
||||||
|
val producedTx = services.signInitialTransaction(builder, notary.owningKey)
|
||||||
|
services.recordTransactions(producedTx)
|
||||||
|
return producedTx.tx.outRef(0)
|
||||||
|
}
|
||||||
|
|
||||||
recordTransactions(consumedTx)
|
private fun <T : LinearState> consumeAndProduce(states: List<StateAndRef<T>>, notary: Party) {
|
||||||
|
states.forEach {
|
||||||
|
consumeAndProduce(it, notary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun consumeDeals(dealStates: List<StateAndRef<DealState>>, notary: Party) = consume(dealStates, notary)
|
||||||
|
fun consumeLinearStates(linearStates: List<StateAndRef<LinearState>>, notary: Party) = consume(linearStates, notary)
|
||||||
|
fun evolveLinearStates(linearStates: List<StateAndRef<LinearState>>, notary: Party) = consumeAndProduce(linearStates, notary)
|
||||||
|
fun evolveLinearState(linearState: StateAndRef<LinearState>, notary: Party): StateAndRef<LinearState> = consumeAndProduce(linearState, notary)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consume cash, sending any change to the default identity for this node. Only suitable for use in test scenarios,
|
||||||
|
* where nodes have a default identity.
|
||||||
|
*/
|
||||||
|
@JvmOverloads
|
||||||
|
fun consumeCash(amount: Amount<Currency>, to: Party = CHARLIE, notary: Party): Vault.Update<ContractState> {
|
||||||
|
return consumeCash(amount, services.myInfo.chooseIdentityAndCert(), to, notary)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consume cash, sending any change to the specified identity.
|
||||||
|
*/
|
||||||
|
private fun consumeCash(amount: Amount<Currency>, ourIdentity: PartyAndCertificate, to: Party = CHARLIE, notary: Party): Vault.Update<ContractState> {
|
||||||
|
val update = services.vaultService.rawUpdates.toFuture()
|
||||||
|
// A tx that spends our money.
|
||||||
|
val builder = TransactionBuilder(notary).apply {
|
||||||
|
Cash.generateSpend(services, this, amount, ourIdentity, to)
|
||||||
|
}
|
||||||
|
val spendTx = services.signInitialTransaction(builder, notary.owningKey)
|
||||||
|
services.recordTransactions(spendTx)
|
||||||
|
return update.getOrThrow(Duration.ofSeconds(3))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : LinearState> ServiceHub.consumeAndProduce(stateAndRef: StateAndRef<T>, notary: Party): StateAndRef<T> {
|
|
||||||
// Create a txn consuming different contract types
|
|
||||||
var builder = TransactionBuilder(notary = notary).apply {
|
|
||||||
addInputState(stateAndRef)
|
|
||||||
addCommand(dummyCommand(notary.owningKey))
|
|
||||||
}
|
|
||||||
val consumedTx = signInitialTransaction(builder, notary.owningKey)
|
|
||||||
|
|
||||||
recordTransactions(consumedTx)
|
|
||||||
|
|
||||||
// Create a txn consuming different contract types
|
|
||||||
builder = TransactionBuilder(notary = notary).apply {
|
|
||||||
addOutputState(DummyLinearContract.State(linearId = stateAndRef.state.data.linearId,
|
|
||||||
participants = stateAndRef.state.data.participants), DUMMY_LINEAR_CONTRACT_PROGRAM_ID)
|
|
||||||
addCommand(dummyCommand(notary.owningKey))
|
|
||||||
}
|
|
||||||
val producedTx = signInitialTransaction(builder, notary.owningKey)
|
|
||||||
|
|
||||||
recordTransactions(producedTx)
|
|
||||||
|
|
||||||
return producedTx.tx.outRef<T>(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <T : LinearState> ServiceHub.consumeAndProduce(states: List<StateAndRef<T>>, notary: Party) {
|
|
||||||
states.forEach {
|
|
||||||
consumeAndProduce(it, notary)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ServiceHub.consumeDeals(dealStates: List<StateAndRef<DealState>>, notary: Party) = consume(dealStates, notary)
|
|
||||||
fun ServiceHub.consumeLinearStates(linearStates: List<StateAndRef<LinearState>>, notary: Party) = consume(linearStates, notary)
|
|
||||||
fun ServiceHub.evolveLinearStates(linearStates: List<StateAndRef<LinearState>>, notary: Party) = consumeAndProduce(linearStates, notary)
|
|
||||||
fun ServiceHub.evolveLinearState(linearState: StateAndRef<LinearState>, notary: Party): StateAndRef<LinearState> = consumeAndProduce(linearState, notary)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Consume cash, sending any change to the default identity for this node. Only suitable for use in test scenarios,
|
|
||||||
* where nodes have a default identity.
|
|
||||||
*/
|
|
||||||
@JvmOverloads
|
|
||||||
fun ServiceHub.consumeCash(amount: Amount<Currency>, to: Party = CHARLIE, notary: Party): Vault.Update<ContractState> {
|
|
||||||
return consumeCash(amount, myInfo.chooseIdentityAndCert(), to, notary)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Consume cash, sending any change to the specified identity.
|
|
||||||
*/
|
|
||||||
@JvmOverloads
|
|
||||||
fun ServiceHub.consumeCash(amount: Amount<Currency>, ourIdentity: PartyAndCertificate, to: Party = CHARLIE, notary: Party): Vault.Update<ContractState> {
|
|
||||||
val update = vaultService.rawUpdates.toFuture()
|
|
||||||
val services = this
|
|
||||||
|
|
||||||
// A tx that spends our money.
|
|
||||||
val builder = TransactionBuilder(notary).apply {
|
|
||||||
Cash.generateSpend(services, this, amount, ourIdentity, to)
|
|
||||||
}
|
|
||||||
val spendTx = signInitialTransaction(builder, notary.owningKey)
|
|
||||||
|
|
||||||
recordTransactions(spendTx)
|
|
||||||
|
|
||||||
return update.getOrThrow(Duration.ofSeconds(3))
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user