77
88package org.dashj.platform.contracts.wallet
99
10+ import org.bitcoinj.core.Sha256Hash
1011import org.bitcoinj.crypto.ChildNumber
1112import org.bitcoinj.crypto.KeyCrypterAESCBC
1213import org.bitcoinj.crypto.KeyCrypterException
1314import org.dashj.platform.assertListEquals
1415import org.dashj.platform.assertMapEquals
1516import org.dashj.platform.dashpay.BlockchainIdentity
1617import org.dashj.platform.dashpay.PlatformNetwork
17- import org.dashj.platform.dpp.identity.IdentityPublicKey
18+ import org.dashj.platform.dpp.toHex
1819import org.dashj.platform.dpp.util.Cbor
1920import org.dashj.platform.dpp.util.Converters
2021import org.dashj.platform.dpp.util.Entropy
2122import org.dashj.platform.sdk.KeyType
23+ import org.dashj.platform.wallet.TxMetadataItem
24+ import org.dashj.platform.wallet.WalletUtils
25+ import org.dashj.platform.wallet.WalletUtils.TxMetadataBatch
2226import org.junit.jupiter.api.Assertions.assertArrayEquals
2327import org.junit.jupiter.api.Assertions.assertEquals
28+ import org.junit.jupiter.api.Assertions.assertTrue
2429import org.junit.jupiter.api.BeforeEach
2530import org.junit.jupiter.api.Test
2631import org.junit.jupiter.api.assertThrows
@@ -29,20 +34,24 @@ class TxMetaDataTests : PlatformNetwork() {
2934 lateinit var txId: ByteArray
3035 lateinit var txMetadataItem: TxMetadataItem
3136 lateinit var txMetadataItemTwo: TxMetadataItem
37+ lateinit var txMetadataItemThree: TxMetadataItem
38+ lateinit var txMetadataItemFour: TxMetadataItem
3239 lateinit var txMetadataItems: List <TxMetadataItem >
3340
3441 @BeforeEach
3542 fun beforeEach () {
3643 txId = Entropy .generateRandomBytes(32 )
44+
45+ // protobuf bytes
46+ // 0a2028f18c0366f4b3cbf5aca02653d038764b786b5ec1eddc601e82179464f3173f109df3e9bc061a13416c69636527732050697a7a612050617274792100000000008049402a035553443207657870656e7365
3747 txMetadataItem = TxMetadataItem (
3848 txId,
3949 System .currentTimeMillis() / 1000 ,
4050 " Alice's Pizza Party" ,
4151 51.00 ,
4252 " USD" ,
4353 " expense" ,
44- null ,
45- version = 0
54+ null
4655 )
4756
4857 txMetadataItemTwo = TxMetadataItem (
@@ -55,7 +64,34 @@ class TxMetaDataTests : PlatformNetwork() {
5564 " DashDirect"
5665 )
5766
58- txMetadataItems = listOf (txMetadataItem, txMetadataItemTwo)
67+ txMetadataItemThree = TxMetadataItem (
68+ Entropy .generateRandomBytes(32 ),
69+ System .currentTimeMillis() / 1000 ,
70+ null ,
71+ 52.23 ,
72+ " USD" ,
73+ " expense"
74+ )
75+
76+ txMetadataItemFour = TxMetadataItem (
77+ Converters .fromHex(" c44d1077cd4628d0ac06e22032a4e8458f9d01be6342453de3eef88657b193ce" ),
78+ System .currentTimeMillis() / 1000 ,
79+ " Bob's Burger Joint" ,
80+ 52.23 ,
81+ " USD" ,
82+ " expense" ,
83+ " DashDirect" ,
84+ customIconUrl = " https://storage.googleapis.com/mash-potato-fireplace.appspot.com/alhi323/alhi/alhirafiyun.png" ,
85+ giftCardNumber = " 123456-7899-abcdef" ,
86+ giftCardPin = " 1234" ,
87+ merchantName = " 1-800-HotSoup" ,
88+ originalPrice = 54.99 ,
89+ barcodeValue = " 3249u3ou234238403820820840238082304823047234098234023802384" ,
90+ barcodeFormat = " EAN_8" ,
91+ merchantUrl = " https://1-800-hotsoup.com"
92+ )
93+
94+ txMetadataItems = listOf (txMetadataItem, txMetadataItemTwo, txMetadataItemThree, txMetadataItemFour)
5995 }
6096
6197 @Test
@@ -67,26 +103,80 @@ class TxMetaDataTests : PlatformNetwork() {
67103 " exchangeRate" to 51.00 ,
68104 " currencyCode" to " USD" ,
69105 " taxCategory" to " expense" ,
70- " version" to 0
71106 ),
72107 txMetadataItem.toObject()
73108 )
74109 }
75110
111+ @Test
112+ fun toProtobufTest () {
113+ txMetadataItem.toProtobuf().toByteArray()
114+ }
115+
76116 @Test
77117 fun toCborTestForOneItemTest () {
78118 assertArrayEquals(
79- Converters .fromHex(" a7646d656d6f72426f62277320427572676572204a6f696e7464747849645820c44d1077cd4628d0ac06e22032a4e8458f9d01be6342453de3eef88657b193ce67736572766963656a446173684469726563746776657273696f6e006b74617843617465676f727967657870656e73656c63757272656e6379436f6465635553446c65786368616e676552617465fb404a1d70a3d70a3d " ),
119+ Converters .fromHex(" A6646D656D6F72426F62277320427572676572204A6F696E7464747849645820C44D1077CD4628D0AC06E22032A4E8458F9D01BE6342453DE3EEF88657B193CE67736572766963656A446173684469726563746B74617843617465676F727967657870656E73656C63757272656E6379436F6465635553446C65786368616E676552617465FB404A1D70A3D70A3D " .lowercase() ),
80120 Cbor .encode(txMetadataItemTwo.toObject())
81121 )
82122 }
83123
124+ //
125+ // 0a
126+ // 20 - 32 bytes
127+ // 28f18c0366f4b3cbf5aca02653d038764b786b5ec1eddc601e82179464f3173f - txId
128+ // 10
129+ // b7f9e9bc061a13416c69636527732050697a7a612050617274792100000000008049402a035553443207657870656e7365
130+
131+ @Test
132+ fun toProtobufForOneItemtest () {
133+ txMetadataItem = TxMetadataItem (
134+ Sha256Hash .wrap(" 28f18c0366f4b3cbf5aca02653d038764b786b5ec1eddc601e82179464f3173f" ).bytes,
135+ 1738177719933 / 1000 ,
136+ " Alice's Pizza Party" ,
137+ 51.00 ,
138+ " USD" ,
139+ " expense" ,
140+ null
141+ )
142+ println (System .currentTimeMillis())
143+ println (txMetadataItem.toProtobuf().toByteArray().toHex())
144+ assertArrayEquals(
145+ Converters .fromHex(" 0a2028f18c0366f4b3cbf5aca02653d038764b786b5ec1eddc601e82179464f3173f10b7f9e9bc061a13416c69636527732050697a7a612050617274792100000000008049402a035553443207657870656e7365" ),
146+ txMetadataItem.toProtobuf().toByteArray()
147+ )
148+ }
149+
84150 @Test
85151 fun toCborTestForAllItemsTest () {
86152 val cborData = Cbor .encode(txMetadataItems.map { it.toObject() })
87153 val map = Cbor .decodeList(cborData)
88154 }
89155
156+ @Test
157+ fun serializedSizeTest () {
158+ txMetadataItems.forEachIndexed { i, item ->
159+ val cborData = Cbor .encode(item.toObject())
160+ val protobufData = item.toProtobuf().toByteArray()
161+ assertTrue(cborData.size > protobufData.size)
162+ println (" $i : cbor = ${cborData.size} bytes; protobuf = ${protobufData.size} ; %less = ${(cborData.size- protobufData.size).toDouble()/ cborData.size} " )
163+ }
164+ val cborData = Cbor .encode(txMetadataItems.map { it.toObject() })
165+ val protobufData = TxMetadataBatch .newBuilder()
166+ .addAllItems(txMetadataItems.map { it.toProtobuf() })
167+ .build().toByteArray()
168+ assertTrue(cborData.size > protobufData.size)
169+ println (" all: cbor = ${cborData.size} bytes; protobuf = ${protobufData.size} ; %less = ${(cborData.size- protobufData.size).toDouble()/ cborData.size} " )
170+ }
171+
172+ @Test
173+ fun deserializedTest () {
174+ val serializedBytes = txMetadataItem.toProtobuf().toByteArray()
175+ assertEquals(84 , serializedBytes.size)
176+ val deserializedTxMetadata = TxMetadataItem (WalletUtils .TxMetadataItem .parseFrom(serializedBytes))
177+ assertEquals(txMetadataItem, deserializedTxMetadata)
178+ }
179+
90180 @Test
91181 fun roundTripTest () {
92182 val blockchainIdentity = BlockchainIdentity (platform, 0 , wallet, authenticationGroupExtension)
@@ -132,4 +222,9 @@ class TxMetaDataTests : PlatformNetwork() {
132222 // 32 bytes = IV (16 bytes) + 1 block (16 bytes)
133223 assertEquals(32 , encryptedData.initialisationVector.size + encryptedData.encryptedBytes.size)
134224 }
225+
226+ @Test
227+ fun publishToPlatform () {
228+
229+ }
135230}
0 commit comments