You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Trustchain functionality does not work at all when running from the command line. The tests do, however, pass. This is specifically due to this snippet in Community.kt:
scope =CoroutineScope(Dispatchers.Main+ job)
The Main dispatcher is meant to interact with UI objects and as such would like an Android, JavaFX, or Swing dependency. This is of course undesirable when running from command line. When running from command line, the application crashes when functionality using the Main dispatcher is used, for instance when signing agreement blocks. The demo-jvm application is too rudimentary to pick up on this. The unit tests also do not find this because during testing, the Main dispatcher is set to be a TestCoroutineDispatcher (see BaseCommunityTest.kt) which does work without a GUI. Additionally, it is considered bad practice to hardcode your dispatchers.
How to reproduce
Replace startIpv8() in Application.kt with the following and run two instances of the application:
privatefunstartIpv8() {
val myKey =JavaCryptoProvider.generateKey()
val myPeer =Peer(myKey)
val udpEndpoint =UdpEndpoint(8090, InetAddress.getByName("0.0.0.0"))
val endpoint =EndpointAggregator(udpEndpoint, null)
val config =IPv8Configuration(overlays =listOf(
createDiscoveryCommunity(),
createTrustChainCommunity(),
createDemoCommunity()
), walkerInterval =1.0)
val ipv8 =IPv8(endpoint, config, myPeer)
ipv8.start()
val trustCom = ipv8.getOverlay<TrustChainCommunity>()!!val demoCom = ipv8.getOverlay<DemoCommunity>()!!
trustCom.registerBlockSigner("trust_issue_block", object:BlockSigner {
overridefunonSignatureRequest(block:TrustChainBlock) {
logger.info("Received an issue block.")
trustCom.createAgreementBlock(block, mapOf<Any?, Any?>())
}
})
scope.launch {
while (true) {
if (demoCom.getPeers().isNotEmpty()) {
trustCom.createProposalBlock(
"trust_issue_block",
mapOf("message" to "hi"),
demoCom.getPeers()[0].publicKey.keyToBin()
)
}
for ((_, overlay) in ipv8.overlays) {
printPeersInfo(overlay)
}
logger.info("===")
delay(5000)
}
}
while (ipv8.isStarted()) {
Thread.sleep(1000)
}
}
The text was updated successfully, but these errors were encountered:
I wonder if anybody here has documentation or suggestions on how to get to speed with using this framework. Or is there a forum or chat channel where developers gather?
More specific question is: can this framework be used to create a tree of peers where getting reference to a peer will also provide reference to a list of nearby peers?
The Trustchain functionality does not work at all when running from the command line. The tests do, however, pass. This is specifically due to this snippet in
Community.kt
:The Main dispatcher is meant to interact with UI objects and as such would like an Android, JavaFX, or Swing dependency. This is of course undesirable when running from command line. When running from command line, the application crashes when functionality using the
Main
dispatcher is used, for instance when signing agreement blocks. Thedemo-jvm
application is too rudimentary to pick up on this. The unit tests also do not find this because during testing, theMain
dispatcher is set to be a TestCoroutineDispatcher (seeBaseCommunityTest.kt
) which does work without a GUI. Additionally, it is considered bad practice to hardcode your dispatchers.How to reproduce
Replace
startIpv8()
inApplication.kt
with the following and run two instances of the application:The text was updated successfully, but these errors were encountered: