private void pulseStartCleanup() { lowPrioExecutorService.scheduleAtFixedRate(() -> ledger.cleanup(config.isPermanetMode()),1,config.getMaxDiskCacheAge().getSeconds(),TimeUnit.SECONDS); lowPrioExecutorService.scheduleAtFixedRate(() -> ledger.removeExpiredStoragesAndSubscriptionsCascade(),config.getExpriedStorageCleanupInterval().getSeconds(),config.getExpriedStorageCleanupInterval().getSeconds(),TimeUnit.SECONDS); lowPrioExecutorService.scheduleAtFixedRate(() -> ledger.clearExpiredNameRecords(config.getHoldDuration()),config.getExpriedNamesCleanupInterval().getSeconds(),config.getExpriedNamesCleanupInterval().getSeconds(),TimeUnit.SECONDS); }
StateRecord newRecord = ledger.findOrCreate(hashId); newRecord.setState(committingState) .setCreatedAt(createdAt)
if ((origin_id != null) && (contract_id != null)) throw new IOException("invalid arguments (only one origin_id or contract_id is allowed)"); byte[] slotBin = node.getLedger().getSmartContractById(HashId.withDigest(slot_id)); if (slotBin != null) { SlotContract slotContract = (SlotContract) Contract.fromPackedTransaction(slotBin); if (contract_id != null) { HashId contractHashId = HashId.withDigest(contract_id); res.set("contract", node.getLedger().getContractInStorage(contractHashId)); } else if (origin_id != null) { HashId originHashId = HashId.withDigest(origin_id); List<byte[]> storedRevisions = node.getLedger().getContractsInStorageByOrigin(slotContract.getId(), originHashId); if (storedRevisions.size() == 1) { res.set("contract", storedRevisions.get(0));
default StateRecord getLockOwnerOf(HashId itemId) { return getLockOwnerOf(getRecord(itemId)); }
/** * Create a record, locked for approval, e.g. item that will be creared (and approved) by current item if it will * get the positive consensus. Throws {@link IllegalStateException} if this record is not in a proper state to * perform this operation, e.g. not is in {@link ItemState#PENDING} - what means, the local check is not yet * finished. * <p> * Note that items that are already locally checked ({@link ItemState#PENDING_NEGATIVE} or {@link * ItemState#PENDING_POSITIVE} can not create any output locks. * * @param id id of the new item to be locked for approval * @return the record of the new item locked for creatoin pn success, null it such item already exists and not * locked for apporoval by us. */ public StateRecord createOutputLockRecord(HashId id) { checkLedgerExists(); checkHaveRecordId(); if (state != ItemState.PENDING) throw new IllegalStateException("wrong state to createOutputLockRecord: " + state); StateRecord newRecord = ledger.getRecord(id); if (newRecord != null) { // if it is not locked for approval - failure if (newRecord.state != ItemState.LOCKED_FOR_CREATION) return null; // it it is locked by us, ok return newRecord.lockedByRecordId == recordId ? newRecord : null; } newRecord = ledger.createOutputLockRecord(recordId, id); return newRecord; }
byte[] restoredPackedData = networkNode.getLedger().getContractInStorage(simpleContract.getId()); assertNotNull(restoredPackedData); Contract restoredContract = Contract.fromPackedTransaction(restoredPackedData); Set<Long> envs = networkNode.getLedger().getSubscriptionEnviromentIds(simpleContract.getId()); if(envs.size() > 0) { for(Long envId : envs) { NImmutableEnvironment environment = networkNode.getLedger().getEnvironment(envId); double days = (double) 100 * config.getServiceRate(NSmartContract.SmartContractType.SLOT1.name()).doubleValue() * 1024 / simpleContract.getPackedTransaction().length; double hours = days * 24; assertNotNull(networkNode.getLedger().getEnvironment(slotContract.getId())); byte[] restoredPackedData = node.getLedger().getContractInStorage(simpleContract.getId()); assertNotNull(restoredPackedData); Contract restoredContract = Contract.fromPackedTransaction(restoredPackedData); Set<Long> envs = node.getLedger().getSubscriptionEnviromentIds(simpleContract.getId()); if(envs.size() > 0) { for(Long envId : envs) { NImmutableEnvironment environment = node.getLedger().getEnvironment(envId); double days = (double) 100 * config.getServiceRate(NSmartContract.SmartContractType.SLOT1.name()).doubleValue() * 1024 / simpleContract.getPackedTransaction().length; double hours = days * 24; assertNotNull(node.getLedger().getEnvironment(slotContract.getId())); restoredPackedData = networkNode.getLedger().getContractInStorage(simpleContract.getId()); assertNull(restoredPackedData);
envs = node.getLedger().getSubscriptionEnviromentIds(originNoCallback); if (envs.size() > 0) { for (Long envId : envs) { NImmutableEnvironment environment = node.getLedger().getEnvironment(envId); for (ContractSubscription foundCss : environment.subscriptions()) { System.out.println("expected expiresAt: " + calculateExpires); envs = node.getLedger().getSubscriptionEnviromentIds(originCallback); if(envs.size() > 0) { for(Long envId : envs) { NImmutableEnvironment environment = node.getLedger().getEnvironment(envId); for (ContractSubscription foundCss : environment.subscriptions()) { System.out.println("expected: " + calculateExpires); envs = networkNode.getLedger().getSubscriptionEnviromentIds(originNoCallback); if (envs.size() > 0) { for (Long envId : envs) { NImmutableEnvironment environment = networkNode.getLedger().getEnvironment(envId); for (ContractSubscription foundCss : environment.subscriptions()) { System.out.println("expected: " + calculateExpires); envs = networkNode.getLedger().getSubscriptionEnviromentIds(originCallback); if(envs.size() > 0) { for(Long envId : envs) { NImmutableEnvironment environment = networkNode.getLedger().getEnvironment(envId); for (ContractSubscription foundCss : environment.subscriptions()) { System.out.println("expected: " + calculateExpires);
Set<Long> envs = testSpace.node.node.getLedger().getSubscriptionEnviromentIds(simpleContract.getOrigin()); if(envs.size() > 0) { for(Long envId : envs) { NImmutableEnvironment environment = testSpace.node.node.getLedger().getEnvironment(envId); for (ContractSubscription foundCss : environment.subscriptions()) { System.out.println("expected: " + calculateExpires); envs = networkNode.node.getLedger().getSubscriptionEnviromentIds(simpleContract.getOrigin()); if(envs.size() > 0) { for(Long envId : envs) { NImmutableEnvironment environment = networkNode.node.getLedger().getEnvironment(envId); for (ContractSubscription foundCss : environment.subscriptions()) { System.out.println("expected: " + calculateExpires); envs = testSpace.node.node.getLedger().getSubscriptionEnviromentIds(simpleContract.getOrigin()); if(envs.size() > 0) { for(Long envId : envs) { assertTrue(testSpace.node.node.getLedger().getFollowerCallbacksToResyncByEnvId(envId).isEmpty()); NImmutableEnvironment environment = testSpace.node.node.getLedger().getEnvironment(envId); for (ContractSubscription foundCss : environment.subscriptions()) { System.out.println("expected: " + calculateExpires.minusSeconds(seconds * 2)); envs = networkNode.node.getLedger().getSubscriptionEnviromentIds(simpleContract.getOrigin()); if(envs.size() > 0) { for(Long envId : envs) { assertTrue(networkNode.node.getLedger().getFollowerCallbacksToResyncByEnvId(envId).isEmpty()); NImmutableEnvironment environment = networkNode.node.getLedger().getEnvironment(envId);
public ResyncingItem(HashId hid, StateRecord record) { resyncingState = ResyncingItemProcessingState.WAIT_FOR_VOTES; this.hashId = hid; this.record = record; StateRecord recordWas = ledger.getRecord(hid); if (recordWas != null) { stateWas = recordWas.getState(); } else { stateWas = ItemState.UNDEFINED; } resyncNodes.put(ItemState.APPROVED, new HashSet<>()); resyncNodes.put(ItemState.REVOKED, new HashSet<>()); resyncNodes.put(ItemState.DECLINED, new HashSet<>()); resyncNodes.put(ItemState.UNDEFINED, new HashSet<>()); }
NImmutableEnvironment env = n.getLedger().getEnvironment(slotContract.getId()); assertNotNull(n.getLedger().getSmartContractById(slotContract.getId())); assertNotNull(n.getLedger().getContractInStorage(trackingContract.getId())); n.getLedger().removeEnvironment(slotContract.getId()); assertNull(n.getLedger().getSmartContractById(slotContract.getId())); assertNull(n.getLedger().getContractInStorage(trackingContract.getId()));
data = node.getLedger().getContractInStorage(id); data = node.getLedger().getKeepingItem(id); NImmutableEnvironment nie = node.getLedger().getEnvironment(id);
assertNotNull(n.getLedger().getSmartContractById(uns.getId())); assertNotNull(n.getLedger().getNameRecord(name)); n.getLedger().removeEnvironment(uns.getId()); assertNull(n.getLedger().getSmartContractById(uns.getId())); assertNull(n.getLedger().getNameRecord(name));
assertEquals(ItemState.APPROVED, testSpace.node.node.waitItem(uns.getNew().get(0).getId(), 8000).state); assertEquals(testSpace.node.node.getLedger().getNameRecord(unsName.getUnsName()).getEntries().size(),1); assertEquals(ItemState.APPROVED, testSpace.node.node.waitItem(parcel.getPayment().getContract().getId(), 8000).state); assertNull(testSpace.node.node.getLedger().getNameRecord(unsName.getUnsName())); testSpace.nodes.forEach( m -> m.config.setAuthorizedNameServiceCenterKeyData(new Bytes(authorizedNameServiceKey.getPublicKey().pack()))); assertNull(testSpace.node.node.getLedger().getNameRecord(name)); assertNotNull(testSpace.node.node.getLedger().getNameRecord(name2)); assertNotNull(testSpace.nodes.get(testSpace.nodes.size()-1).node.getLedger().getNameRecord(name)); assertNull(testSpace.nodes.get(testSpace.nodes.size()-1).node.getLedger().getNameRecord(name2)); assertNull(testSpace.node.node.getLedger().getNameRecord(name2)); assertNotNull(testSpace.node.node.getLedger().getNameRecord(name)); assertEquals(testSpace.node.node.getLedger().getNameRecord(name).getEntries().iterator().next().getLongAddress(),long3.toString()); assertNotNull(testSpace.nodes.get(testSpace.nodes.size()-1).node.getLedger().getNameRecord(name)); assertNull(testSpace.nodes.get(testSpace.nodes.size()-1).node.getLedger().getNameRecord(name2)); assertEquals(testSpace.nodes.get(testSpace.nodes.size()-1).node.getLedger().getNameRecord(name).getEntries().iterator().next().getLongAddress(),long1.toString()); assertNotNull(testSpace.nodes.get(testSpace.nodes.size()-1).node.getLedger().getNameRecord(name)); assertNull(testSpace.nodes.get(testSpace.nodes.size()-1).node.getLedger().getNameRecord(name2)); assertEquals(testSpace.nodes.get(testSpace.nodes.size()-1).node.getLedger().getNameRecord(name).getEntries().iterator().next().getLongAddress(),long3.toString());
private Binder getBody(Binder params, Session session) throws IOException { checkNode(session, true); Binder res = new Binder(); if (!node.getConfig().isPermanetMode()) return res; HashId itemId = (HashId) params.get("itemId"); byte[] body = node.getLedger().getKeepingItem(itemId); if (body != null) { res.put("packedContract", body); return res; } node.resync(itemId); ItemResult itemResult = node.checkItem(itemId); if (itemResult == ItemResult.UNDEFINED) return res; Approvable item = node.getKeepingItemFromNetwork(itemId); if (item == null) return res; if ((item instanceof Contract) && (item.getId().equals(itemId)) && (HashId.of(((Contract) item).getLastSealedBinary()).equals(itemId))) { StateRecord record = node.getLedger().getRecord(itemId); node.getLedger().putKeepingItem(record, item); body = ((Contract) item).getPackedTransaction(); res.put("packedContract", body); } return res; }
StateRecord originRecord = ledger.findOrCreate(origin.getId()); originRecord.setExpiresAt(origin.getExpiresAt()); originRecord.setCreatedAt(origin.getCreatedAt()); StateRecord newRevisionRecord = ledger.findOrCreate(newRevision.getId()); newRevisionRecord.setExpiresAt(newRevision.getExpiresAt()); newRevisionRecord.setCreatedAt(newRevision.getCreatedAt()); StateRecord newContractRecord = ledger.findOrCreate(newContract.getId()); newContractRecord.setExpiresAt(newContract.getExpiresAt()); newContractRecord.setCreatedAt(newContract.getCreatedAt()); ledger.putItem(originRecord,origin, Instant.now().plusSeconds(3600*24)); newRevisionRecord.save(); ledger.putItem(newRevisionRecord,newRevision, Instant.now().plusSeconds(3600*24)); if(newContractRecord.getState() == ItemState.UNDEFINED) { newContractRecord.destroy(); ledgers.stream().forEach(ledger -> ledger.close()); ledgers.clear();
byte[] restoredPackedData = networkNode.getLedger().getContractInStorage(simpleContract.getId()); assertNotNull(restoredPackedData); Contract restoredContract = Contract.fromPackedTransaction(restoredPackedData); byte[] restoredPackedData = node.getLedger().getContractInStorage(simpleContract.getId()); assertNotNull(restoredPackedData); Contract restoredContract = Contract.fromPackedTransaction(restoredPackedData);
private Binder queryNameContract(Binder params, Session session) throws IOException { checkNode(session, true); Binder b = new Binder(); String nameContract = params.getStringOrThrow("name"); NNameRecord nr = node.getLedger().getNameRecord(nameContract); if (nr != null) { NImmutableEnvironment env = node.getLedger().getEnvironment(nr.getEnvironmentId()); if (env != null) { byte[] packedContract = env.getContract().getPackedTransaction(); b.put("packedContract", packedContract); } } return b; }
recordWas = ledger.getRecord(itemId); } catch (Exception e) { e.printStackTrace(); record = ledger.findOrCreate(itemId);
assertNull(ledger.getEnvironment(rev1.getId())); NImmutableEnvironment environment = new NImmutableEnvironment(rev1,new Binder(),Do.listOf(),Do.listOf(),Do.listOf(),null,null); ledger.saveEnvironment(environment); assertNotNull(ledger.getEnvironment(rev1.getId())); assertNull(ledger.getEnvironment(rev1.getId()));
int finalI = i; StateRecord originRecord = ledger.findOrCreate(origin.getId()); originRecord.setExpiresAt(origin.getExpiresAt()); originRecord.setCreatedAt(origin.getCreatedAt()); StateRecord newRevisionRecord = ledger.findOrCreate(newRevision.getId()); newRevisionRecord.setExpiresAt(newRevision.getExpiresAt()); newRevisionRecord.setCreatedAt(newRevision.getCreatedAt()); StateRecord newContractRecord = ledger.findOrCreate(newContract.getId()); newContractRecord.setExpiresAt(newContract.getExpiresAt()); newContractRecord.setCreatedAt(newContract.getCreatedAt()); ledger.putItem(originRecord,origin, Instant.now().plusSeconds(3600*24)); newRevisionRecord.save(); ledger.putItem(newRevisionRecord,newRevision, Instant.now().plusSeconds(3600*24)); if(newContractRecord.getState() == ItemState.UNDEFINED) { newContractRecord.destroy();