use of com.icodici.db.Db in project universa by UniversaBlockchain.
the class BaseNetworkTest method registerParcelWithRealPayment.
@Test(timeout = 90000)
public void registerParcelWithRealPayment() throws Exception {
Set<PrivateKey> stepaPrivateKeys = new HashSet<>();
Set<PublicKey> stepaPublicKeys = new HashSet<>();
stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey")));
for (PrivateKey pk : stepaPrivateKeys) {
stepaPublicKeys.add(pk.getPublicKey());
}
Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml");
stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next());
stepaCoins.seal();
stepaCoins.check();
stepaCoins.traceErrors();
PrivateKey ownerKey = new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"));
Set<PublicKey> keys = new HashSet();
keys.add(ownerKey.getPublicKey());
Contract stepaU = InnerContractsService.createFreshU(100, keys, true);
stepaU.check();
// stepaU.setIsU(true);
stepaU.traceErrors();
node.registerItem(stepaU);
ItemResult itemResult = node.waitItem(stepaU.getId(), 18000);
assertEquals(ItemState.APPROVED, itemResult.state);
Parcel parcel = ContractsService.createParcel(stepaCoins, stepaU, 1, stepaPrivateKeys, false);
parcel.getPayment().getContract().paymentCheck(config.getUIssuerKeys());
parcel.getPayment().getContract().traceErrors();
parcel.getPayload().getContract().check();
parcel.getPayload().getContract().traceErrors();
assertEquals(100 - 1, parcel.getPaymentContract().getStateData().getIntOrThrow("transaction_units"));
assertEquals(10000, parcel.getPaymentContract().getStateData().getIntOrThrow("test_transaction_units"));
assertTrue(parcel.getPaymentContract().isOk());
assertFalse(parcel.getPaymentContract().isLimitedForTestnet());
assertTrue(parcel.getPayloadContract().isOk());
assertFalse(parcel.getPayloadContract().isLimitedForTestnet());
System.out.println("Parcel: " + parcel.getId());
System.out.println("Payment contract: " + parcel.getPaymentContract().getId() + " is U: " + parcel.getPaymentContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload contract: " + parcel.getPayloadContract().getId() + " is U: " + parcel.getPayloadContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
// int todayPaidAmount = node.nodeStats.todayPaidAmount;// reuse payment for another contract
// Contract contract = new Contract(TestKeys.privateKey(12));
// contract.seal();
// Parcel parcel2 = new Parcel(contract.getTransactionPack(), parcel.getPayment());
node.registerParcel(parcel);
// node.registerParcel(parcel2);
node.waitParcel(parcel.getId(), 8000);
// node.nodeStats.collect(ledger,config);
// assertEquals(node.nodeStats.todayPaidAmount-todayPaidAmount,1);
// check payment and payload contracts
assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayment().getContract().getId(), 8000).state);
assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayload().getContract().getId(), 8000).state);
assertTrue(!node.checkItem(parcel.getPayload().getContract().getId()).isTestnet);
if (ledger instanceof PostgresLedger) {
PostgresLedger pl = (PostgresLedger) ledger;
try (Db db = pl.getDb()) {
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPayloadContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPaymentContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
}
}
}
use of com.icodici.db.Db in project universa by UniversaBlockchain.
the class BaseNetworkTest method registerParcelWithTestPayment.
@Test(timeout = 90000)
public void registerParcelWithTestPayment() throws Exception {
Set<PrivateKey> stepaPrivateKeys = new HashSet<>();
Set<PublicKey> stepaPublicKeys = new HashSet<>();
stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey")));
for (PrivateKey pk : stepaPrivateKeys) {
stepaPublicKeys.add(pk.getPublicKey());
}
Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml");
stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next());
stepaCoins.setExpiresAt(ZonedDateTime.now().plusMonths(1));
stepaCoins.seal();
stepaCoins.check();
stepaCoins.traceErrors();
PrivateKey ownerKey = new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"));
Set<PublicKey> keys = new HashSet();
keys.add(ownerKey.getPublicKey());
Contract stepaU = InnerContractsService.createFreshU(100, keys, true);
stepaU.check();
// stepaU.setIsU(true);
stepaU.traceErrors();
node.registerItem(stepaU);
ItemResult itemResult = node.waitItem(stepaU.getId(), 18000);
assertEquals(ItemState.APPROVED, itemResult.state);
Parcel parcel = ContractsService.createParcel(stepaCoins, stepaU, 1, stepaPrivateKeys, true);
parcel.getPayment().getContract().paymentCheck(config.getUIssuerKeys());
parcel.getPayment().getContract().traceErrors();
parcel.getPayload().getContract().check();
parcel.getPayload().getContract().traceErrors();
assertEquals(100, parcel.getPaymentContract().getStateData().getIntOrThrow("transaction_units"));
assertEquals(10000 - 1, parcel.getPaymentContract().getStateData().getIntOrThrow("test_transaction_units"));
assertTrue(parcel.getPaymentContract().isOk());
assertTrue(!parcel.getPaymentContract().isLimitedForTestnet());
assertTrue(parcel.getPayloadContract().isOk());
assertTrue(parcel.getPayloadContract().isLimitedForTestnet());
System.out.println("Parcel: " + parcel.getId());
System.out.println("Payment contract: " + parcel.getPaymentContract().getId() + " is U: " + parcel.getPaymentContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload contract: " + parcel.getPayloadContract().getId() + " is U: " + parcel.getPayloadContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
node.nodeStats.collect(ledger, config);
// int todayPaidAmount = node.nodeStats.todayPaidAmount;
// LogPrinter.showDebug(true);
node.registerParcel(parcel);
// wait parcel
node.waitParcel(parcel.getId(), 8000);
node.nodeStats.collect(ledger, config);
// assertEquals(node.nodeStats.todayPaidAmount-todayPaidAmount,0);
// check payment and payload contracts
assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayment().getContract().getId(), 8000).state);
assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayload().getContract().getId(), 8000).state);
assertTrue(node.checkItem(parcel.getPayload().getContract().getId()).isTestnet);
if (ledger instanceof PostgresLedger) {
PostgresLedger pl = (PostgresLedger) ledger;
try (Db db = pl.getDb()) {
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPayloadContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 1);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPaymentContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
}
}
}
use of com.icodici.db.Db in project universa by UniversaBlockchain.
the class BaseNetworkTest method registerParcelWithRealAndTestRevisionPayment.
@Test(timeout = 90000)
public void registerParcelWithRealAndTestRevisionPayment() throws Exception {
Set<PrivateKey> stepaPrivateKeys = new HashSet<>();
Set<PrivateKey> martyPrivateKeys = new HashSet<>();
stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey")));
martyPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/marty_mcfly.private.unikey")));
Contract subContract = Contract.fromDslFile(ROOT_PATH + "martyCoins.yml");
subContract.addSignerKey(martyPrivateKeys.iterator().next());
subContract.setExpiresAt(ZonedDateTime.now().plusMonths(1));
subContract.seal();
subContract.check();
subContract.traceErrors();
Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml");
stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next());
stepaCoins.setExpiresAt(ZonedDateTime.now().plusMonths(1));
stepaCoins.getTransactionPack().addReferencedItem(subContract);
stepaCoins.addNewItems(subContract);
stepaCoins.seal();
stepaCoins.check();
stepaCoins.traceErrors();
PrivateKey ownerKey = new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"));
Set<PublicKey> keys = new HashSet();
keys.add(ownerKey.getPublicKey());
Contract stepaU = InnerContractsService.createFreshU(100, keys, true);
stepaU.check();
stepaU.traceErrors();
node.registerItem(stepaU);
ItemResult itemResult = node.waitItem(stepaU.getId(), 18000);
assertEquals(ItemState.APPROVED, itemResult.state);
Parcel parcel = ContractsService.createParcel(stepaCoins, stepaU, 1, stepaPrivateKeys, false);
parcel.getPayment().getContract().paymentCheck(config.getUIssuerKeys());
parcel.getPayment().getContract().traceErrors();
parcel.getPayload().getContract().check();
parcel.getPayload().getContract().traceErrors();
assertEquals(100 - 1, parcel.getPaymentContract().getStateData().getIntOrThrow("transaction_units"));
assertEquals(10000, parcel.getPaymentContract().getStateData().getIntOrThrow("test_transaction_units"));
assertTrue(parcel.getPaymentContract().isOk());
assertFalse(parcel.getPaymentContract().isLimitedForTestnet());
assertTrue(parcel.getPayloadContract().isOk());
assertFalse(parcel.getPayloadContract().isLimitedForTestnet());
Contract subItemPayload = (Contract) parcel.getPayloadContract().getNewItems().iterator().next();
subItemPayload.check();
subItemPayload.traceErrors();
assertTrue(subItemPayload.isOk());
assertFalse(subItemPayload.isLimitedForTestnet());
System.out.println("Parcel: " + parcel.getId());
System.out.println("Payment contract: " + parcel.getPaymentContract().getId() + " is U: " + parcel.getPaymentContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload contract: " + parcel.getPayloadContract().getId() + " is U: " + parcel.getPayloadContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload subitem contract: " + subItemPayload.getId() + " is U: " + subItemPayload.isU(config.getUIssuerKeys(), config.getUIssuerName()));
node.registerParcel(parcel);
// wait parcel
node.waitParcel(parcel.getId(), 8000);
// check payment and payload contracts
ItemResult itemResultPayment = node.waitItem(parcel.getPayment().getContract().getId(), 8000);
ItemResult itemResultPayload = node.waitItem(parcel.getPayload().getContract().getId(), 8000);
ItemResult itemResultSubItem = node.waitItem(subItemPayload.getId(), 8000);
assertEquals(ItemState.APPROVED, itemResultPayment.state);
assertEquals(ItemState.APPROVED, itemResultPayload.state);
assertEquals(ItemState.APPROVED, itemResultSubItem.state);
if (ledger instanceof PostgresLedger) {
PostgresLedger pl = (PostgresLedger) ledger;
try (Db db = pl.getDb()) {
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPayloadContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPaymentContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", subItemPayload.getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
}
}
stepaU = InnerContractsService.createFreshU(100, keys, true);
stepaU.check();
stepaU.traceErrors();
node.registerItem(stepaU);
itemResult = node.waitItem(stepaU.getId(), 18000);
assertEquals(ItemState.APPROVED, itemResult.state);
subContract = subContract.createRevision();
subContract.addSignerKey(martyPrivateKeys.iterator().next());
subContract.setOwnerKey(stepaPrivateKeys.iterator().next());
subContract.seal();
subContract.check();
subContract.traceErrors();
stepaCoins = stepaCoins.createRevision();
stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next());
stepaCoins.setOwnerKey(martyPrivateKeys.iterator().next());
stepaCoins.getTransactionPack().addReferencedItem(subContract);
stepaCoins.addNewItems(subContract);
stepaCoins.seal();
stepaCoins.check();
stepaCoins.traceErrors();
parcel = ContractsService.createParcel(stepaCoins, stepaU, 1, stepaPrivateKeys, true);
parcel.getPayment().getContract().paymentCheck(config.getUIssuerKeys());
parcel.getPayment().getContract().traceErrors();
parcel.getPayload().getContract().check();
parcel.getPayload().getContract().traceErrors();
assertEquals(100, parcel.getPaymentContract().getStateData().getIntOrThrow("transaction_units"));
assertEquals(10000 - 1, parcel.getPaymentContract().getStateData().getIntOrThrow("test_transaction_units"));
assertTrue(parcel.getPaymentContract().isOk());
assertTrue(!parcel.getPaymentContract().isLimitedForTestnet());
assertTrue(parcel.getPayloadContract().isOk());
assertTrue(parcel.getPayloadContract().isLimitedForTestnet());
subItemPayload = (Contract) parcel.getPayloadContract().getNewItems().iterator().next();
subItemPayload.check();
subItemPayload.traceErrors();
assertTrue(subItemPayload.isOk());
assertTrue(subItemPayload.isLimitedForTestnet());
System.out.println("Parcel: " + parcel.getId());
System.out.println("Payment contract: " + parcel.getPaymentContract().getId() + " is U: " + parcel.getPaymentContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload contract: " + parcel.getPayloadContract().getId() + " is U: " + parcel.getPayloadContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload subitem contract: " + subItemPayload.getId() + " is U: " + subItemPayload.isU(config.getUIssuerKeys(), config.getUIssuerName()));
node.registerParcel(parcel);
// wait parcel
node.waitParcel(parcel.getId(), 8000);
// check payment and payload contracts
itemResultPayment = node.waitItem(parcel.getPayment().getContract().getId(), 8000);
itemResultPayload = node.waitItem(parcel.getPayload().getContract().getId(), 8000);
itemResultSubItem = node.waitItem(subItemPayload.getId(), 8000);
assertEquals(ItemState.APPROVED, itemResultPayment.state);
assertEquals(ItemState.APPROVED, itemResultPayload.state);
assertEquals(ItemState.APPROVED, itemResultSubItem.state);
if (ledger instanceof PostgresLedger) {
PostgresLedger pl = (PostgresLedger) ledger;
try (Db db = pl.getDb()) {
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPayloadContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 1);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPaymentContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", subItemPayload.getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 1);
}
}
}
}
}
use of com.icodici.db.Db in project universa by UniversaBlockchain.
the class PostgresLedgerTest method reconnectAfterPostgresRestart_queryType3_transaction.
@Ignore
@Test
public // db.transaction
void reconnectAfterPostgresRestart_queryType3_transaction() throws Exception {
final long TEST_DURATION_SECONDS = 30;
System.out.println("TEST_DURATION_SECONDS = " + TEST_DURATION_SECONDS);
System.out.println("For success testing, restart pg daemon manually several times during this test running.");
HashId someHashId = HashId.createRandom();
StateRecord sr0 = new StateRecord(someHashId);
sr0.setState(ItemState.LOCKED_FOR_CREATION);
ledger.save(sr0);
AtomicLong reqCounter = new AtomicLong(0);
AtomicLong ansCounter = new AtomicLong(0);
ThreadPoolExecutor pool = new ScheduledThreadPoolExecutor(Runtime.getRuntime().availableProcessors() * 2);
long t0 = System.currentTimeMillis();
while (true) {
reqCounter.incrementAndGet();
pool.submit(() -> {
AtomicBoolean doRepeat = new AtomicBoolean(true);
while (doRepeat.get()) {
try {
Db db = ledger.getDb();
db.transaction(() -> {
ResultSet rs = db.queryRow("SELECT state FROM ledger, pg_sleep(0.01) WHERE hash=?", someHashId.getDigest());
int iValue = rs.getInt(1);
iValue += 1;
db.queryRow("UPDATE ledger SET state=? WHERE hash=? RETURNING id;", iValue, someHashId.getDigest());
Thread.sleep(10);
rs = db.queryRow("SELECT state FROM ledger, pg_sleep(0.01) WHERE hash=?", someHashId.getDigest());
int iValue2 = rs.getInt(1);
if (iValue2 == iValue)
ansCounter.incrementAndGet();
doRepeat.set(false);
return null;
});
} catch (Exception e) {
System.out.println("sleep and repeat...");
try {
Thread.sleep(2000);
} catch (InterruptedException id) {
}
}
}
System.out.println("reqCounter = " + reqCounter + ", ansCounter: " + ansCounter);
// try{Thread.sleep(1000);}catch (InterruptedException ie){}
});
if (reqCounter.get() - ansCounter.get() > 100)
Thread.sleep(100);
long dt = System.currentTimeMillis() - t0;
if (dt >= TEST_DURATION_SECONDS * 1000)
break;
}
while (ansCounter.get() < reqCounter.get()) {
Thread.sleep(1000);
System.out.println("waiting for reqCounter == ansCounter: reqCounter = " + reqCounter + ", ansCounter = " + ansCounter);
long dt = System.currentTimeMillis() - t0;
if (dt >= TEST_DURATION_SECONDS * 2 * 1000)
break;
}
assertEquals(reqCounter.get(), ansCounter.get());
System.out.println("SUCCESS");
}
use of com.icodici.db.Db in project universa by UniversaBlockchain.
the class BaseNetworkTest method registerParcelWithTestAndRealRevisionPayment.
@Test(timeout = 90000)
public void registerParcelWithTestAndRealRevisionPayment() throws Exception {
Set<PrivateKey> stepaPrivateKeys = new HashSet<>();
Set<PrivateKey> martyPrivateKeys = new HashSet<>();
stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey")));
martyPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/marty_mcfly.private.unikey")));
Contract subContract = Contract.fromDslFile(ROOT_PATH + "martyCoins.yml");
subContract.addSignerKey(martyPrivateKeys.iterator().next());
subContract.setExpiresAt(ZonedDateTime.now().plusMonths(1));
subContract.seal();
subContract.check();
subContract.traceErrors();
Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml");
stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next());
stepaCoins.setExpiresAt(ZonedDateTime.now().plusMonths(1));
stepaCoins.getTransactionPack().addReferencedItem(subContract);
stepaCoins.addNewItems(subContract);
stepaCoins.seal();
stepaCoins.check();
stepaCoins.traceErrors();
PrivateKey ownerKey = new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"));
Set<PublicKey> keys = new HashSet();
keys.add(ownerKey.getPublicKey());
Contract stepaU = InnerContractsService.createFreshU(100, keys, true);
stepaU.check();
stepaU.traceErrors();
node.registerItem(stepaU);
ItemResult itemResult = node.waitItem(stepaU.getId(), 18000);
assertEquals(ItemState.APPROVED, itemResult.state);
Parcel parcel = ContractsService.createParcel(stepaCoins, stepaU, 1, stepaPrivateKeys, true);
parcel.getPayment().getContract().paymentCheck(config.getUIssuerKeys());
parcel.getPayment().getContract().traceErrors();
parcel.getPayload().getContract().check();
parcel.getPayload().getContract().traceErrors();
assertEquals(100, parcel.getPaymentContract().getStateData().getIntOrThrow("transaction_units"));
assertEquals(10000 - 1, parcel.getPaymentContract().getStateData().getIntOrThrow("test_transaction_units"));
assertTrue(parcel.getPaymentContract().isOk());
assertTrue(!parcel.getPaymentContract().isLimitedForTestnet());
assertTrue(parcel.getPayloadContract().isOk());
assertTrue(parcel.getPayloadContract().isLimitedForTestnet());
Contract subItemPayload = (Contract) parcel.getPayloadContract().getNewItems().iterator().next();
subItemPayload.check();
subItemPayload.traceErrors();
assertTrue(subItemPayload.isOk());
assertTrue(subItemPayload.isLimitedForTestnet());
System.out.println("Parcel: " + parcel.getId());
System.out.println("Payment contract: " + parcel.getPaymentContract().getId() + " is U: " + parcel.getPaymentContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload contract: " + parcel.getPayloadContract().getId() + " is U: " + parcel.getPayloadContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload subitem contract: " + subItemPayload.getId() + " is U: " + subItemPayload.isU(config.getUIssuerKeys(), config.getUIssuerName()));
node.registerParcel(parcel);
// wait parcel
node.waitParcel(parcel.getId(), 8000);
// check payment and payload contracts
ItemResult itemResultPayment = node.waitItem(parcel.getPayment().getContract().getId(), 8000);
ItemResult itemResultPayload = node.waitItem(parcel.getPayload().getContract().getId(), 8000);
ItemResult itemResultSubItem = node.waitItem(subItemPayload.getId(), 8000);
assertEquals(ItemState.APPROVED, itemResultPayment.state);
assertEquals(ItemState.APPROVED, itemResultPayload.state);
assertEquals(ItemState.APPROVED, itemResultSubItem.state);
if (ledger instanceof PostgresLedger) {
PostgresLedger pl = (PostgresLedger) ledger;
try (Db db = pl.getDb()) {
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPayloadContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 1);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPaymentContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", subItemPayload.getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 1);
}
}
}
}
stepaU = InnerContractsService.createFreshU(100, keys, true);
stepaU.check();
stepaU.traceErrors();
node.registerItem(stepaU);
itemResult = node.waitItem(stepaU.getId(), 18000);
assertEquals(ItemState.APPROVED, itemResult.state);
subContract = subContract.createRevision();
subContract.addSignerKey(martyPrivateKeys.iterator().next());
subContract.setOwnerKey(stepaPrivateKeys.iterator().next());
subContract.seal();
subContract.check();
subContract.traceErrors();
stepaCoins = stepaCoins.createRevision();
stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next());
stepaCoins.setOwnerKey(martyPrivateKeys.iterator().next());
stepaCoins.getTransactionPack().addReferencedItem(subContract);
stepaCoins.addNewItems(subContract);
stepaCoins.seal();
stepaCoins.check();
stepaCoins.traceErrors();
parcel = ContractsService.createParcel(stepaCoins, stepaU, 1, stepaPrivateKeys, false);
parcel.getPayment().getContract().paymentCheck(config.getUIssuerKeys());
parcel.getPayment().getContract().traceErrors();
parcel.getPayload().getContract().check();
parcel.getPayload().getContract().traceErrors();
assertEquals(100 - 1, parcel.getPaymentContract().getStateData().getIntOrThrow("transaction_units"));
assertEquals(10000, parcel.getPaymentContract().getStateData().getIntOrThrow("test_transaction_units"));
assertTrue(parcel.getPaymentContract().isOk());
assertFalse(parcel.getPaymentContract().isLimitedForTestnet());
assertTrue(parcel.getPayloadContract().isOk());
assertFalse(parcel.getPayloadContract().isLimitedForTestnet());
subItemPayload = (Contract) parcel.getPayloadContract().getNewItems().iterator().next();
subItemPayload.check();
subItemPayload.traceErrors();
assertTrue(subItemPayload.isOk());
assertFalse(subItemPayload.isLimitedForTestnet());
System.out.println("Parcel: " + parcel.getId());
System.out.println("Payment contract: " + parcel.getPaymentContract().getId() + " is U: " + parcel.getPaymentContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload contract: " + parcel.getPayloadContract().getId() + " is U: " + parcel.getPayloadContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
System.out.println("Payload subitem contract: " + subItemPayload.getId() + " is U: " + subItemPayload.isU(config.getUIssuerKeys(), config.getUIssuerName()));
node.registerParcel(parcel);
// wait parcel
node.waitParcel(parcel.getId(), 8000);
// check payment and payload contracts
itemResultPayment = node.waitItem(parcel.getPayment().getContract().getId(), 8000);
itemResultPayload = node.waitItem(parcel.getPayload().getContract().getId(), 8000);
itemResultSubItem = node.waitItem(subItemPayload.getId(), 8000);
assertEquals(ItemState.APPROVED, itemResultPayment.state);
assertEquals(ItemState.APPROVED, itemResultPayload.state);
assertEquals(ItemState.APPROVED, itemResultSubItem.state);
if (ledger instanceof PostgresLedger) {
PostgresLedger pl = (PostgresLedger) ledger;
try (Db db = pl.getDb()) {
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPayloadContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", parcel.getPaymentContract().getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
try (PreparedStatement ps = db.statement("select count(*) from ledger_testrecords where hash = ?", subItemPayload.getId().getDigest())) {
try (ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertEquals(rs.getInt(1), 0);
}
}
}
}
}
Aggregations