Skip to content

Commit ceeaf35

Browse files
authored
Merge pull request #26 from XYOracleNetwork/feature/dollar-sign-meta-signatures
Feature/dollar sign meta signatures
2 parents 4141214 + b54ccc4 commit ceeaf35

File tree

9 files changed

+64
-33
lines changed

9 files changed

+64
-33
lines changed

sdk/src/androidTest/java/network/xyo/client/boundwitness/XyoBoundWitnessTest.kt

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import network.xyo.client.datastore.previous_hash_store.PreviousHashStorePrefsRe
1212
import network.xyo.client.lib.XyoSerializable
1313
import network.xyo.client.node.client.NodeClient
1414
import network.xyo.client.payload.XyoPayload
15+
import org.json.JSONObject
1516
import org.junit.Before
1617
import org.junit.Rule
1718
import org.junit.Test
@@ -71,15 +72,29 @@ class XyoBoundWitnessTest {
7172
}
7273

7374
@Test
74-
fun testBoundWitnessHash() {
75+
fun testBoundWitnessMeta() {
7576
runBlocking {
7677
val bw = XyoBoundWitnessBuilder(appContext).signer(Account.random()).payloads(listOf(
7778
TestPayload1()
7879
)).build()
79-
val hashableFields = bw.getBodyJson()
80-
assert(bw._hash !== null)
81-
assert(bw._hash!! == XyoSerializable.sha256String(hashableFields))
82-
assert(bw._hash!! == hashableFields.hash())
80+
assert(bw.rootHash() == XyoSerializable.sha256String(bw))
81+
assert(bw.hash() == bw.getBodyJson().hash())
82+
assert(bw.meta.client == "android")
83+
assert(bw.meta.signatures?.size == 1)
84+
}
85+
}
86+
87+
@Test
88+
fun testBoundWitnessMetaSerialization() {
89+
runBlocking {
90+
val bw = XyoBoundWitnessBuilder(appContext).signer(Account.random()).payloads(listOf(
91+
TestPayload1()
92+
)).build()
93+
val serializedBw = XyoSerializable.toJson(bw)
94+
val bwJson = JSONObject(serializedBw)
95+
val meta = bwJson.get("\$meta") as JSONObject
96+
assert(meta.get("client") == "android")
97+
assertNotNull(meta.get("signatures"))
8398
}
8499
}
85100

@@ -93,7 +108,7 @@ class XyoBoundWitnessTest {
93108
val bw2 = XyoBoundWitnessBuilder(appContext).signer(testAccount).payloads(listOf(
94109
TestPayload1()
95110
)).build()
96-
assert(bw2.previous_hashes.first() == bw._hash)
111+
assert(bw2.previous_hashes.first() == bw.hash())
97112
}
98113
}
99114
}

sdk/src/androidTest/java/network/xyo/client/settings/XyoSdkTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class XyoSdkTest {
7676
val bw = result.bw
7777

7878
val result2 = panel.reportAsyncQuery()
79-
assert(result2.bw.previous_hashes.contains(bw._hash))
79+
assert(result2.bw.previous_hashes.contains(bw.hash()))
8080
}
8181
}
8282
}

sdk/src/androidTest/java/network/xyo/client/witness/WitnessLocationHandlerTest.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import kotlinx.coroutines.runBlocking
1010
import network.xyo.client.lib.TestConstants
1111
import network.xyo.client.account.Account
1212
import network.xyo.client.boundwitness.XyoBoundWitnessBodyJson
13+
import network.xyo.client.boundwitness.XyoBoundWitnessJson
1314
import network.xyo.client.datastore.previous_hash_store.PreviousHashStorePrefsRepository
1415
import network.xyo.client.witness.types.WitnessResult
1516
import network.xyo.client.payload.XyoPayload
@@ -48,10 +49,10 @@ class WitnessLocationHandlerTest {
4849
@Test
4950
fun testObserve() {
5051
runBlocking {
51-
var firstBw: XyoBoundWitnessBodyJson? = null
52+
var firstBw: XyoBoundWitnessJson? = null
5253
val result1 = WitnessLocationHandler().witness(appContext.applicationContext, arrayListOf(Pair(apiDomainBeta, null)))
5354
when (result1) {
54-
is WitnessResult.Success<Triple<XyoBoundWitnessBodyJson?, XyoPayload?, XyoPayload?>> -> {
55+
is WitnessResult.Success<Triple<XyoBoundWitnessJson?, XyoPayload?, XyoPayload?>> -> {
5556
firstBw = result1.data.first
5657
assertInstanceOf<XyoBoundWitnessBodyJson>(firstBw)
5758
assertInstanceOf<XyoLocationPayload>(result1.data.second)
@@ -62,12 +63,12 @@ class WitnessLocationHandlerTest {
6263
}
6364
}
6465

65-
var secondBw: XyoBoundWitnessBodyJson? = null
66+
var secondBw: XyoBoundWitnessJson? = null
6667
val result2 = WitnessLocationHandler().witness(appContext.applicationContext, arrayListOf(Pair(apiDomainBeta, null)))
6768
when (result2) {
68-
is WitnessResult.Success<Triple<XyoBoundWitnessBodyJson?, XyoPayload?, XyoPayload?>> -> {
69+
is WitnessResult.Success<Triple<XyoBoundWitnessJson?, XyoPayload?, XyoPayload?>> -> {
6970
secondBw = result2.data.first
70-
assertInstanceOf<XyoBoundWitnessBodyJson>(secondBw)
71+
assertInstanceOf<XyoBoundWitnessJson>(secondBw)
7172
assertInstanceOf<XyoLocationPayload>(result2.data.second)
7273
assertInstanceOf<XyoLocationPayloadRaw>(result2.data.third)
7374

sdk/src/androidTest/java/network/xyo/client/witness/XyoPanelTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class XyoPanelTest {
113113
val bw = result.bw
114114

115115
val result2 = panel.reportAsyncQuery()
116-
assert(result2.bw.previous_hashes.contains(bw._hash))
116+
assert(result2.bw.previous_hashes.contains(bw.hash()))
117117
}
118118
}
119119

sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessJson.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package network.xyo.client.boundwitness
33
import com.squareup.moshi.JsonClass
44

55
@JsonClass(generateAdapter = true)
6-
open class QueryBoundWitnessJson: XyoBoundWitnessJson(), XyoBoundWitnessMetaInterface {
6+
open class QueryBoundWitnessJson: XyoBoundWitnessJson() {
77
var query: String? = null
88

99
// override to return a bound witness json body that has query in its hashable fields

sdk/src/main/java/network/xyo/client/boundwitness/XyoBoundWitnessBuilder.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ open class XyoBoundWitnessBuilder(private val context: Context) {
8181
bw.addresses = addresses
8282

8383
// update underscore fields
84-
bw._client = "android"
84+
bw.meta.client = "android"
8585

8686
// construct fields involved in hashing
8787
constructHashableFieldsFields()
@@ -92,8 +92,7 @@ open class XyoBoundWitnessBuilder(private val context: Context) {
9292
// in the serialized version of the bw because they will invalidate the hash
9393
val hashable = hashableFields()
9494
val hash = XyoSerializable.sha256String(hashable)
95-
bw._signatures = this.sign(hash)
96-
bw._hash = hash
95+
bw.meta.signatures = this.sign(hash)
9796
}
9897

9998
open suspend fun build(): XyoBoundWitnessJson {
Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
11
package network.xyo.client.boundwitness
22

3+
import com.squareup.moshi.Json
34
import com.squareup.moshi.JsonClass
45

56
@JsonClass(generateAdapter = true)
6-
open class XyoBoundWitnessJson: XyoBoundWitnessBodyJson(), XyoBoundWitnessMetaInterface {
7-
override var _signatures: List<String>? = null
8-
override var _client: String? = null
9-
override var _hash: String? = null
7+
class XyoBoundWitnessMeta: XyoBoundWitnessMetaInterface {
8+
override var signatures: List<String>? = null
9+
override var client: String? = null
10+
}
11+
12+
@JsonClass(generateAdapter = true)
13+
open class XyoBoundWitnessJson: XyoBoundWitnessBodyJson() {
14+
@Json(ignore = true)
15+
val _meta: XyoBoundWitnessMeta = XyoBoundWitnessMeta()
16+
17+
@Json(name = "\$meta")
18+
var meta: XyoBoundWitnessMeta
19+
get() = _meta
20+
set(value) = Unit
21+
22+
override fun hash(): String {
23+
return getBodyJson().hash()
24+
}
25+
26+
fun rootHash(): String {
27+
return sha256String(this)
28+
}
1029

1130
open fun getBodyJson(): XyoBoundWitnessBodyJson {
12-
return this
31+
return XyoBoundWitnessBodyJson(this.addresses, this.previous_hashes, this.payload_hashes, this.payload_schemas, this.timestamp)
1332
}
1433
}
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package network.xyo.client.boundwitness
22

3-
import network.xyo.client.payload.Payload
4-
5-
interface XyoBoundWitnessMetaInterface : Payload {
6-
var _hash: String?
7-
var _signatures: List<String>?
8-
var _client: String?
3+
interface XyoBoundWitnessMetaInterface {
4+
var signatures: List<String>?
5+
var client: String?
96
}

sdk/src/main/java/network/xyo/client/witness/location/info/Handler.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import network.xyo.client.witness.types.WitnessHandlerInterface
1010
import network.xyo.client.witness.types.WitnessResult
1111
import network.xyo.client.witness.XyoPanel
1212
import network.xyo.client.account.model.AccountInstance
13-
import network.xyo.client.boundwitness.XyoBoundWitnessBodyJson
13+
import network.xyo.client.boundwitness.XyoBoundWitnessJson
1414
import network.xyo.client.payload.XyoPayload
1515
import network.xyo.client.settings.XyoSdk
1616

17-
open class WitnessLocationHandler : WitnessHandlerInterface<Triple<XyoBoundWitnessBodyJson?, XyoPayload?, XyoPayload?>> {
17+
open class WitnessLocationHandler : WitnessHandlerInterface<Triple<XyoBoundWitnessJson?, XyoPayload?, XyoPayload?>> {
1818
@RequiresApi(Build.VERSION_CODES.M)
19-
override suspend fun witness(context: Context, nodeUrlsAndAccounts: ArrayList<Pair<String, AccountInstance?>>): WitnessResult<Triple<XyoBoundWitnessBodyJson?, XyoPayload?, XyoPayload?>> {
19+
override suspend fun witness(context: Context, nodeUrlsAndAccounts: ArrayList<Pair<String, AccountInstance?>>): WitnessResult<Triple<XyoBoundWitnessJson?, XyoPayload?, XyoPayload?>> {
2020
val account = XyoSdk.getInstance(context.applicationContext).getAccount()
2121
val panel = XyoPanel(context, account, nodeUrlsAndAccounts, listOf(
2222
XyoLocationWitness(account)
@@ -26,11 +26,11 @@ open class WitnessLocationHandler : WitnessHandlerInterface<Triple<XyoBoundWitne
2626

2727
@OptIn(ExperimentalCoroutinesApi::class)
2828
@RequiresApi(Build.VERSION_CODES.M)
29-
private suspend fun getLocation(panel: XyoPanel): WitnessResult<Triple<XyoBoundWitnessBodyJson?, XyoPayload?, XyoPayload?>> {
29+
private suspend fun getLocation(panel: XyoPanel): WitnessResult<Triple<XyoBoundWitnessJson?, XyoPayload?, XyoPayload?>> {
3030
return withContext(Dispatchers.IO) {
3131
var locationPayload: XyoPayload? = null
3232
var locationPayloadRaw: XyoPayload? = null
33-
var bw: XyoBoundWitnessBodyJson? = null
33+
var bw: XyoBoundWitnessJson? = null
3434
val errors: MutableList<Error> = mutableListOf()
3535
panel.let {
3636
it.reportAsyncQuery().let { result ->

0 commit comments

Comments
 (0)