Skip to content

Commit

Permalink
timestamp in bw
Browse files Browse the repository at this point in the history
made timestamp in bw optional, but this causes a problem with the archivist, so round trip fails until archivist fixed
  • Loading branch information
arietrouw committed Dec 6, 2024
1 parent 1a1e28a commit 48a45d8
Show file tree
Hide file tree
Showing 25 changed files with 199 additions and 135 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ class BoundWitnessTest {
TestPayload1()
)).build()
assert(bw.dataHash() == bw.getBodyJson().dataHash())
assert(bw.meta.client == "android")
assert(bw.meta.signatures?.size == 1)
assert(bw._meta.client == "android")
assert(bw._meta.signatures?.size == 1)
}
}

Expand Down Expand Up @@ -119,7 +119,21 @@ class BoundWitnessTest {
val testAccount = Account.random()
val testPayload = TestPayload1()
val bw = BoundWitnessBuilder().signer(testAccount).payloads(listOf(testPayload)).build()
client.insert(listOf(bw, testPayload))
val bwJson: String = bw.toPrettyJson()
println("bwJson-start")
println(bwJson)
println("bwJson-end")
val queryResult = client.insert(listOf(bw, testPayload))

assert((queryResult.errors?.size ?: 0) == 0)
assert((queryResult.response?.payloads?.size == 2))

val bwDataHash = bw.dataHash()
assert(((queryResult.response?.payloads?.filter { it.dataHash() == bwDataHash})?.size == 1))

val dataResult = client.get(listOf(bwDataHash))
val dataResponse = dataResult.response?.rawResponse
assert(dataResponse!!.contains(bwDataHash))

val bwHash = bw.dataHash()
val result = client.get(listOf(bwHash))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import kotlinx.coroutines.runBlocking
import network.xyo.client.lib.TestConstants
import network.xyo.client.account.Account
import network.xyo.client.archivist.wrapper.ArchivistWrapper
import network.xyo.client.boundwitness.BoundWitnessBodyJson
import network.xyo.client.boundwitness.BoundWitnessBody
import network.xyo.client.payload.Payload
import org.junit.Before
import org.junit.Test
Expand Down Expand Up @@ -71,7 +71,7 @@ class NodeClientTest {
assertEquals(errors, null)

if (response != null) {
assertEquals(response.bw?.schema, BoundWitnessBodyJson.SCHEMA)
assertEquals(response.bw?.schema, BoundWitnessBody.SCHEMA)
} else {
throw(Error("Response should not be null"))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import androidx.test.rule.GrantPermissionRule
import kotlinx.coroutines.runBlocking
import network.xyo.client.lib.TestConstants
import network.xyo.client.account.Account
import network.xyo.client.boundwitness.BoundWitnessBodyJson
import network.xyo.client.boundwitness.BoundWitnessJson
import network.xyo.client.boundwitness.BoundWitnessBody
import network.xyo.client.boundwitness.BoundWitness
import network.xyo.client.datastore.previous_hash_store.PreviousHashStorePrefsRepository
import network.xyo.client.witness.types.WitnessResult
import network.xyo.client.payload.Payload
Expand Down Expand Up @@ -49,12 +49,12 @@ class WitnessLocationHandlerTest {
@Test
fun testObserve() {
runBlocking {
var firstBw: BoundWitnessJson? = null
var firstBw: BoundWitness? = null
val result1 = WitnessLocationHandler().witness(appContext.applicationContext, arrayListOf(Pair(apiDomainBeta, null)))
when (result1) {
is WitnessResult.Success<Triple<BoundWitnessJson?, Payload?, Payload?>> -> {
is WitnessResult.Success<Triple<BoundWitness?, Payload?, Payload?>> -> {
firstBw = result1.data.first
assertInstanceOf<BoundWitnessBodyJson>(firstBw)
assertInstanceOf<BoundWitnessBody>(firstBw)
assertInstanceOf<LocationPayload>(result1.data.second)
assertInstanceOf<LocationPayloadRaw>(result1.data.third)
}
Expand All @@ -63,12 +63,12 @@ class WitnessLocationHandlerTest {
}
}

var secondBw: BoundWitnessJson? = null
var secondBw: BoundWitness? = null
val result2 = WitnessLocationHandler().witness(appContext.applicationContext, arrayListOf(Pair(apiDomainBeta, null)))
when (result2) {
is WitnessResult.Success<Triple<BoundWitnessJson?, Payload?, Payload?>> -> {
is WitnessResult.Success<Triple<BoundWitness?, Payload?, Payload?>> -> {
secondBw = result2.data.first
assertInstanceOf<BoundWitnessJson>(secondBw)
assertInstanceOf<BoundWitness>(secondBw)
assertInstanceOf<LocationPayload>(result2.data.second)
assertInstanceOf<LocationPayloadRaw>(result2.data.third)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import network.xyo.client.lib.BasicPayload
import network.xyo.client.lib.TestConstants
import network.xyo.client.payload.EventPayload
import network.xyo.client.account.Account
import network.xyo.client.boundwitness.BoundWitnessJson
import network.xyo.client.boundwitness.BoundWitness
import network.xyo.client.datastore.previous_hash_store.PreviousHashStorePrefsRepository
import network.xyo.client.payload.Payload
import network.xyo.client.witness.location.info.LocationActivity
Expand Down Expand Up @@ -134,7 +134,7 @@ class XyoPanelTest {
runBlocking {
val panel = XyoPanel(appContext, Account.random(), arrayListOf(), listOf(XyoSystemInfoWitness()))
val results = panel.reportAsyncQuery()
assertInstanceOf<BoundWitnessJson>(results.bw)
assertInstanceOf<BoundWitness>(results.bw)
assertInstanceOf<SystemInfoPayload>(results.payloads?.first())
}
}
Expand Down
31 changes: 31 additions & 0 deletions sdk/src/main/java/network/xyo/client/boundwitness/BoundWitness.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package network.xyo.client.boundwitness

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import network.xyo.client.payload.model.WithMeta
import network.xyo.client.types.HashHex

@JsonClass(generateAdapter = true)
open class BoundWitness: WithMeta<BoundWitnessMeta>, BoundWitnessBody() {
@Json(name = "\$meta")
override var _meta = BoundWitnessMeta()

@Json(name = "\$hash")
override var _hash: HashHex
get() {
return this.dataHash()
}
set(value){}

override fun dataHash(): String {
return getBodyJson().dataHash()
}

fun rootHash(): String {
return sha256String(this)
}

open fun getBodyJson(): BoundWitnessBody {
return BoundWitnessBody(this.addresses, this.previous_hashes, this.payload_hashes, this.payload_schemas, this.timestamp)
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,35 @@
package network.xyo.client.boundwitness

import network.xyo.client.payload.model.Payload

interface BoundWitnessBodyFields : Payload {
var addresses: List<String>
var payload_hashes: List<String>
var payload_schemas: List<String>
var previous_hashes: List<String?>
// Note: Long is a higher precision type than JavaScript's Number type but it is the default type from
// Kotlin's System.currentTimeMillis().
var timestamp: Long
import com.squareup.moshi.JsonClass
import network.xyo.client.boundwitness.model.BoundWitnessBody
import network.xyo.client.payload.Payload

@JsonClass(generateAdapter = true)
open class BoundWitnessBody(): BoundWitnessBody, Payload(SCHEMA) {
final override var addresses = emptyList<String>()
final override var payload_hashes = emptyList<String>()
final override var payload_schemas = emptyList<String>()
final override var previous_hashes = emptyList<String?>()
final override var timestamp: Long? = null

override fun dataHash(): String {
return sha256String(this)
}

constructor (
addresses: List<String>,
previous_hashes: List<String?>,
payload_hashes: List<String>,
payload_schemas: List<String>,
timestamp: Long? = null,
) : this() {
this.addresses = addresses
this.previous_hashes = previous_hashes
this.payload_hashes = payload_hashes
this.payload_schemas = payload_schemas
}

companion object {
const val SCHEMA = "network.xyo.boundwitness"
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ open class BoundWitnessBuilder {
protected var _payload_hashes = mutableListOf<String>()
protected var _payload_schemas = mutableListOf<String>()
protected var _payloads = mutableListOf<Payload>()
protected open var bw: BoundWitnessJson = BoundWitnessJson()
protected open var bw: BoundWitness = BoundWitness()

var _timestamp: Long? = null

Expand All @@ -33,7 +33,7 @@ open class BoundWitnessBuilder {
}

@OptIn(ExperimentalStdlibApi::class)
private fun hashableFields(): BoundWitnessBodyJson {
private fun hashableFields(): BoundWitnessBody {
// if a timestamp is not provided, set one at the time hashable fields are set
bw.timestamp = _timestamp ?: System.currentTimeMillis()

Expand Down Expand Up @@ -78,7 +78,7 @@ open class BoundWitnessBuilder {
bw.addresses = addresses

// update underscore fields
bw.meta.client = "android"
bw._meta.client = "android"

// construct fields involved in hashing
constructHashableFieldsFields()
Expand All @@ -89,10 +89,10 @@ open class BoundWitnessBuilder {
// in the serialized version of the bw because they will invalidate the hash
val hashable = hashableFields()
val hash = hashable.dataHash()
bw.meta.signatures = this.sign(hash)
bw._meta.signatures = this.sign(hash)
}

open suspend fun build(): BoundWitnessJson {
open suspend fun build(): BoundWitness {
return bw.let{
// update fields
constructFields()
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package network.xyo.client.boundwitness

import com.squareup.moshi.JsonClass
import network.xyo.client.boundwitness.model.BoundWitnessMeta
import network.xyo.client.lib.JsonSerializable

@JsonClass(generateAdapter = true)
class BoundWitnessMeta: BoundWitnessMeta, JsonSerializable() {
override var signatures: List<String>? = null
override var client: String? = null
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package network.xyo.client.boundwitness
import com.squareup.moshi.JsonClass

@JsonClass(generateAdapter = true)
open class QueryBoundWitnessJson: BoundWitnessJson() {
open class QueryBoundWitness: BoundWitness() {
var query: String? = null

// override to return a bound witness json body that has query in its hashable fields
override fun getBodyJson(): QueryBoundWitnessBodyJson {
return QueryBoundWitnessBodyJson(
override fun getBodyJson(): QueryBoundWitnessBody {
return QueryBoundWitnessBody(
addresses,
previous_hashes,
payload_hashes,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package network.xyo.client.boundwitness

import com.squareup.moshi.JsonClass

@JsonClass(generateAdapter = true)
open class QueryBoundWitnessBody(
addresses: List<String>,
previous_hashes: List<String?>,
payload_hashes: List<String>,
payload_schemas: List<String>,
val query: String,
timestamp: Long?
): BoundWitnessBody(addresses, previous_hashes, payload_hashes, payload_schemas, timestamp)

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ class QueryBoundWitnessBuilder : BoundWitnessBuilder() {
return this
}

override suspend fun build(): QueryBoundWitnessJson {
bw = QueryBoundWitnessJson()
override suspend fun build(): QueryBoundWitness {
bw = QueryBoundWitness()
// override to support additional properties for query bound witnesses
return bw.let {
val qbw = it as QueryBoundWitnessJson
val qbw = it as QueryBoundWitness
qbw.query = this.queryHash
constructFields()
it
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package network.xyo.client.boundwitness.model

import network.xyo.client.payload.model.Payload

interface BoundWitnessBody : Payload {
var addresses: List<String>
var payload_hashes: List<String>
var payload_schemas: List<String>
var previous_hashes: List<String?>
// Note: Long is a higher precision type than JavaScript's Number type but it is the default type from
// Kotlin's System.currentTimeMillis().
var timestamp: Long?
}
Loading

0 comments on commit 48a45d8

Please sign in to comment.