From 78f0b30ddaa42224b4eaf9fe57e0d9673e90fbee Mon Sep 17 00:00:00 2001 From: GME Date: Sat, 17 Nov 2018 13:20:00 +0100 Subject: [PATCH] JAVA-API BACK Setup firsts Back Methods for API --- .../client/ChannelClientWrapper.java | 64 ++++++++++++++++-- .../client/FabricClientWrapper.java | 6 +- .../java/blockchain/query/QueryWrapper.java | 49 ++++++++++++++ .../blockchain/query/TransactionWrapper.java | 37 ++++++++++ .../query/ChaincodeTransactionTest.java | 1 + src/test/java/blockchain/query/QueryTest.java | 10 +-- .../queryWrapper/QueryWrapperTest.java | 14 ++++ .../queryWrapper/TransactionWrapperTest.java | 22 ++++++ .../client/ChannelClientWrapper.class | Bin 3060 -> 7855 bytes .../client/FabricClientWrapper.class | Bin 2976 -> 2976 bytes .../blockchain/query/QueryWrapper.class | Bin 0 -> 2712 bytes .../blockchain/query/TransactionWrapper.class | Bin 0 -> 3201 bytes .../query/ChaincodeTransactionTest.class | Bin 6891 -> 6891 bytes .../blockchain/query/QueryTest.class | Bin 4638 -> 3164 bytes .../queryWrapper/QueryWrapperTest.class | Bin 0 -> 1029 bytes .../queryWrapper/TransactionWrapperTest.class | Bin 0 -> 1675 bytes 16 files changed, 184 insertions(+), 19 deletions(-) create mode 100644 target/classes/blockchain/query/QueryWrapper.class create mode 100644 target/classes/blockchain/query/TransactionWrapper.class create mode 100644 target/test-classes/blockchain/queryWrapper/QueryWrapperTest.class create mode 100644 target/test-classes/blockchain/queryWrapper/TransactionWrapperTest.class diff --git a/src/main/java/blockchain/client/ChannelClientWrapper.java b/src/main/java/blockchain/client/ChannelClientWrapper.java index bfd2f3b..4e84469 100644 --- a/src/main/java/blockchain/client/ChannelClientWrapper.java +++ b/src/main/java/blockchain/client/ChannelClientWrapper.java @@ -1,18 +1,20 @@ package blockchain.client; -import org.hyperledger.fabric.sdk.ChaincodeID; -import org.hyperledger.fabric.sdk.Channel; -import org.hyperledger.fabric.sdk.ProposalResponse; -import org.hyperledger.fabric.sdk.QueryByChaincodeRequest; +import blockchain.configuration.Config; +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.hyperledger.fabric.sdk.*; import org.hyperledger.fabric.sdk.exception.InvalidArgumentException; import org.hyperledger.fabric.sdk.exception.ProposalException; - +import org.hyperledger.fabric.sdk.exception.TransactionException; import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; public class ChannelClientWrapper { private String name; - private Channel channel; + static private Channel channel; private FabricClientWrapper fabricClientWrapper; public String getName(){ @@ -46,4 +48,52 @@ public class ChannelClientWrapper { return response; } -} + + //Method to init the channel for query + static public ChannelClientWrapper setupChannel(FabricClientWrapper fabricClientWrapper) throws InvalidArgumentException, TransactionException { + + ChannelClientWrapper channelClientWrapper = fabricClientWrapper.createChannelClient(Config.CHANNEL_NAME); + + channel = channelClientWrapper.getChannel(); + Peer peer = fabricClientWrapper.getClient().newPeer(Config.ORG1_PEER_0,Config.ORG1_PEER_0_URL); + EventHub eventHub = fabricClientWrapper.getClient().newEventHub("eventhub01", "grpc://vps577432.ovh.net:8053"); + Orderer orderer = fabricClientWrapper.getClient().newOrderer(Config.ORDERER_NAME,Config.ORDERER_URL); + channel.addPeer(peer); + channel.addEventHub(eventHub); + channel.addOrderer(orderer); + channel.initialize(); + + return channelClientWrapper; + } + + //Wrapper for channel.sendTransactionProposal + public Collection sendTransactionProposal (TransactionProposalRequest transactionProposalRequest){ + try{ + return channel.sendTransactionProposal(transactionProposalRequest); + }catch (Exception e){ + e.printStackTrace(); + return null; + } + } + + //Wrapper for channel.sendTransaction + public BlockEvent.TransactionEvent sendTransaction(Collection proposalResponses){ + Logger logger = Logger.getLogger(ChannelClientWrapper.class); + BasicConfigurator.configure(); + try{ + + List invalid = proposalResponses.stream().filter(r -> r.isInvalid()).collect(Collectors.toList()); + if (!invalid.isEmpty()) { + invalid.forEach(response -> { + logger.error(response.getMessage()); + }); + } + + return channel.sendTransaction(proposalResponses).get(); + }catch (Exception e){ + e.printStackTrace(); + return null; + } + } + +} \ No newline at end of file diff --git a/src/main/java/blockchain/client/FabricClientWrapper.java b/src/main/java/blockchain/client/FabricClientWrapper.java index b06237c..30b7cb4 100644 --- a/src/main/java/blockchain/client/FabricClientWrapper.java +++ b/src/main/java/blockchain/client/FabricClientWrapper.java @@ -2,12 +2,11 @@ package blockchain.client; import blockchain.configuration.Config; import blockchain.user.UserContext; -import org.hyperledger.fabric.sdk.Channel; -import org.hyperledger.fabric.sdk.HFClient; -import org.hyperledger.fabric.sdk.Peer; +import org.hyperledger.fabric.sdk.*; import org.hyperledger.fabric.sdk.exception.CryptoException; import org.hyperledger.fabric.sdk.exception.InvalidArgumentException; import org.hyperledger.fabric.sdk.exception.ProposalException; +import org.hyperledger.fabric.sdk.exception.TransactionException; import org.hyperledger.fabric.sdk.security.CryptoSuite; import java.lang.reflect.InvocationTargetException; @@ -40,4 +39,5 @@ public class FabricClientWrapper { Peer peer = client.newPeer(Config.ORG1_PEER_0,Config.ORG1_PEER_0_URL); return client.queryChannels(peer); } + } diff --git a/src/main/java/blockchain/query/QueryWrapper.java b/src/main/java/blockchain/query/QueryWrapper.java index 24bdbff..8507b79 100644 --- a/src/main/java/blockchain/query/QueryWrapper.java +++ b/src/main/java/blockchain/query/QueryWrapper.java @@ -1,4 +1,53 @@ package blockchain.query; +import blockchain.client.ChannelClientWrapper; +import blockchain.client.FabricClientWrapper; +import blockchain.configuration.Config; +import blockchain.user.UserContext; +import blockchain.utility.Util; +import org.hyperledger.fabric.sdk.ChaincodeResponse; +import org.hyperledger.fabric.sdk.ProposalResponse; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + public class QueryWrapper { + + public String getUserBalance(String userHashId){ + String response = null; + try{ + UserContext userContext = Util.readUserContext(Config.ORG1,"User-org1"); + String chaincode = Config.CHAINCODE_NAME; + FabricClientWrapper fabricClientWrapper = new FabricClientWrapper(userContext); + + ChannelClientWrapper channelClientWrapper = ChannelClientWrapper.setupChannel(fabricClientWrapper); + + String[] args = {userHashId}; + + Collection responseQuery = channelClientWrapper.queryByChainCode(chaincode,"query",args); + for(ProposalResponse pres : responseQuery){ + ChaincodeResponse.Status status = pres.getStatus(); + if(status.getStatus()!=200){ + throw new Exception(pres.getMessage()); + } + + response = new String(pres.getChaincodeActionResponsePayload()); + } + }catch (Exception e){ + e.printStackTrace(); + } + + if(response==null) response = "Error"; + return response; + } + + public String getUser(String userHashId){ + return ""; + } + + public List getUserLastTransactions(String userHashId){ + List transactions = new ArrayList<>(); + return transactions; + } } diff --git a/src/main/java/blockchain/query/TransactionWrapper.java b/src/main/java/blockchain/query/TransactionWrapper.java index 0d2b352..f1b62eb 100644 --- a/src/main/java/blockchain/query/TransactionWrapper.java +++ b/src/main/java/blockchain/query/TransactionWrapper.java @@ -1,4 +1,41 @@ package blockchain.query; +import blockchain.client.ChannelClientWrapper; +import blockchain.client.FabricClientWrapper; +import blockchain.configuration.Config; +import blockchain.user.UserContext; +import blockchain.utility.Util; +import org.hyperledger.fabric.sdk.BlockEvent; +import org.hyperledger.fabric.sdk.ChaincodeID; +import org.hyperledger.fabric.sdk.ProposalResponse; +import org.hyperledger.fabric.sdk.TransactionProposalRequest; + +import java.util.Collection; + public class TransactionWrapper { + + public String sendTransaction(String from, String to, String amount){ + try{ + UserContext userContext = Util.readUserContext(Config.ORG1,"User-org1"); + String chaincode = Config.CHAINCODE_NAME; + FabricClientWrapper fabricClientWrapper = new FabricClientWrapper(userContext); + + ChannelClientWrapper channelClientWrapper = ChannelClientWrapper.setupChannel(fabricClientWrapper); + + TransactionProposalRequest tpr = fabricClientWrapper.getClient().newTransactionProposalRequest(); + ChaincodeID cid = ChaincodeID.newBuilder().setName(Config.CHAINCODE_NAME).build(); + tpr.setChaincodeID(cid); + tpr.setFcn("invoke"); + tpr.setArgs(new String[]{from,to,amount}); + + Collection responses = channelClientWrapper.sendTransactionProposal(tpr); + BlockEvent.TransactionEvent event = channelClientWrapper.sendTransaction(responses); + + return event.getTransactionID(); + + }catch (Exception e){ + e.printStackTrace(); + return null; + } + } } diff --git a/src/test/java/blockchain/query/ChaincodeTransactionTest.java b/src/test/java/blockchain/query/ChaincodeTransactionTest.java index 2de4bac..db982fa 100644 --- a/src/test/java/blockchain/query/ChaincodeTransactionTest.java +++ b/src/test/java/blockchain/query/ChaincodeTransactionTest.java @@ -57,6 +57,7 @@ public class ChaincodeTransactionTest { Collection responses = channel.sendTransactionProposal(tpr); List invalid = responses.stream().filter(r -> r.isInvalid()).collect(Collectors.toList()); + if (!invalid.isEmpty()) { invalid.forEach(response -> { logger.error(response.getMessage()); diff --git a/src/test/java/blockchain/query/QueryTest.java b/src/test/java/blockchain/query/QueryTest.java index 11aebb3..7b66897 100644 --- a/src/test/java/blockchain/query/QueryTest.java +++ b/src/test/java/blockchain/query/QueryTest.java @@ -26,16 +26,8 @@ public class QueryTest { try{ String chaincode = Config.CHAINCODE_NAME; FabricClientWrapper fabricClientWrapper = new FabricClientWrapper(user); - ChannelClientWrapper channelClientWrapper = fabricClientWrapper.createChannelClient(Config.CHANNEL_NAME); - Channel channel = channelClientWrapper.getChannel(); - Peer peer = fabricClientWrapper.getClient().newPeer(Config.ORG1_PEER_0,Config.ORG1_PEER_0_URL); - EventHub eventHub = fabricClientWrapper.getClient().newEventHub("eventhub01", "grpc://vps577432.ovh.net:8053"); - Orderer orderer = fabricClientWrapper.getClient().newOrderer(Config.ORDERER_NAME,Config.ORDERER_URL); - channel.addPeer(peer); - channel.addEventHub(eventHub); - channel.addOrderer(orderer); - channel.initialize(); + ChannelClientWrapper channelClientWrapper = ChannelClientWrapper.setupChannel(fabricClientWrapper); String[] args1 = {"a"}; diff --git a/src/test/java/blockchain/queryWrapper/QueryWrapperTest.java b/src/test/java/blockchain/queryWrapper/QueryWrapperTest.java index cc7c697..aa4d5ff 100644 --- a/src/test/java/blockchain/queryWrapper/QueryWrapperTest.java +++ b/src/test/java/blockchain/queryWrapper/QueryWrapperTest.java @@ -1,4 +1,18 @@ package blockchain.queryWrapper; +import blockchain.query.QueryWrapper; +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.junit.Test; + public class QueryWrapperTest { + private static Logger logger = Logger.getLogger(QueryWrapperTest.class); + @Test + public void TestGerUserBalance() { + BasicConfigurator.configure(); + QueryWrapper queryWrapper = new QueryWrapper(); + String response = queryWrapper.getUserBalance("a"); + logger.info(response); + } + } diff --git a/src/test/java/blockchain/queryWrapper/TransactionWrapperTest.java b/src/test/java/blockchain/queryWrapper/TransactionWrapperTest.java index 53b642c..da77485 100644 --- a/src/test/java/blockchain/queryWrapper/TransactionWrapperTest.java +++ b/src/test/java/blockchain/queryWrapper/TransactionWrapperTest.java @@ -1,4 +1,26 @@ package blockchain.queryWrapper; +import blockchain.query.QueryWrapper; +import blockchain.query.TransactionWrapper; +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.junit.Test; + public class TransactionWrapperTest { + private static Logger logger = Logger.getLogger(TransactionWrapperTest.class); + + @Test + public void TestTransaction() { + BasicConfigurator.configure(); + QueryWrapper queryWrapper = new QueryWrapper(); + TransactionWrapper transactionWrapper = new TransactionWrapper(); + String responseTransaction = transactionWrapper.sendTransaction("a","b","15"); //do transaction + logger.info("TRANSACTION ID : "+responseTransaction); + + String responseUserB = queryWrapper.getUserBalance("b"); //check new balance of user b + logger.info("BALANCE USER B : "+responseUserB); + + String responseUserA = queryWrapper.getUserBalance("a"); //check new balance of user a + logger.info("BALANCE USER A :"+responseUserA); + } } diff --git a/target/classes/blockchain/client/ChannelClientWrapper.class b/target/classes/blockchain/client/ChannelClientWrapper.class index f0e517c0bf1f6b3d35711331ca021d5fd9c94f42..4f571c9247e70426d974976e0f3bc27f8dd34743 100644 GIT binary patch literal 7855 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 b9s8Q&7;BUKwu zVAJpk)VH2QgTg5qf|J->fD>psiRJ>_iSoMQBlpsfI|^6e=E??uP) zy@cE~p^V8iKo#96Y^0)KoRly|%5V@3RIMFj#QX|UT}i{PVq{&NLAimMlt7XO4tfR( zQX?4yM{ty0Va4Y6>u^2Ikf^KW+vPmwAS+Y{Js8%a;8ApIxIx3y9w&r_8lJA<8JvL1 z!gFI~KsFHaNEn_^c>-)%3;olX!q#l+2b>R=&?lEVO3TtDbd=$Mqy2am6vc5<^2B9J zQVQE{C6QZ2+*)|h5tFWk&n2@I+2=V_&xg(TYX0uP{kWFmZsvc>KSrHuRqbjE>Tnmo UiwY^y+)byQbVi@XXYkqo1EA>%TL1t6 delta 876 zcmZuwO;Zy=5Ph?|WXxtvNQlG`5rZ0FLxdoH#b8v7f}g1P0r(X$DjK3?Jm@J`Z(6lK zL@7wLJop1VdGp}aqereNz;wK=QJIUDD3LE@ssB>}5iS}qGj+;<|n8WC^I z*o?$w0lWBWvHbky(z9w!;)=vocg1?^7VV+gPJ|UA=u(Jcn?e$^64w;2}rEHH@8l-1t-zJ0j_W^ ziyfoRM_5j}0pScc*x$)CV6O0@rKFqVf_g3V!OzY?E~twndM>9$urU{@yoKpyM7@<6 zUZj_1vgvN@q1RLYB)6n5aAjr_9ZmRh)+fkx6YlGtzBV@rG8&=`2U%p0=UZr5Q!Vm;vI@k6DS!=GA7*nM4G?XTYrn@}d5mccbKLnn zFEZH2HymN9e!W&^l$k6u0f^toN{mUO$C>bv^8gOw5Mu*}`5p119B$LwBq;K~xrO*& D(>z`t diff --git a/target/classes/blockchain/client/FabricClientWrapper.class b/target/classes/blockchain/client/FabricClientWrapper.class index 017d1ab455721ced9f277f59564ce0cde8367bdd..37ad9e350a8c2f695efc1d0d60358d1b0afe875b 100644 GIT binary patch delta 71 zcmZ1=zCe7#c}_;*$rm^yM8z0b7{nPk7$g|@86<%$DFy`w>B+WS<(zU1oDA{|A`A+X a_i}adsxWXds4|E#s52-rXiN^__5lFc1`DPD delta 71 zcmZ1=zCe7#c}_-=$rm^yM8z3c7$g`t7$h0^8KfA*8KfB$7-S~fa+Pz+GjIagA`FU? a_i}adsxojfs4<8!XfP--Xig5{_5lFd+zYe- diff --git a/target/classes/blockchain/query/QueryWrapper.class b/target/classes/blockchain/query/QueryWrapper.class new file mode 100644 index 0000000000000000000000000000000000000000..d59212fbfc4734a8ddcb0c51eaa98998c8180589 GIT binary patch literal 2712 zcmbVOTXz#x7~Q9xX41)&mb4TiA|SUES|W1O6bm#KEw<%S3YOw!IvvuX!%Uc&Ai*n& zqAuTDKKSG#ulmx0EYUYz{sDiD;y#nKOxnaYZ0;#CGj)K%hC>b6!9xcr%tj`-tsYW96&UmVeHecDR!s z@l3-xZ}_%c*EW@K)(!+Vk4!tBIcLrqwwt?Fw){%&j2ticMyX`^{Q_%>RyYw@{-EI) zu1R$}vm;lG>qd^tVs1S2ZMWFpvvQ061)&j^0~HSE2-!^l>%v`P@y)udFtQC|zH?X!>wa_c2200<=J9)!Bk$TW(mROkh`Btr?x=PDH5c zF49034Ui6}ZeJkVKmoZ}aZ~bO_(k&2In~I$HgXj47KK!xyLzb{+D@+EIgVw9w&zld zAi#Ao4MR6ft5iEvBryWXMO{)&T|O~(wVWDisQ<`+iqQbwX=9kpxlyAO>5bC;f{Lpw zB^9oUgDN}~C6)|Ri?t%4jeBL^v`*ME-Pgtwc(06_j%TrnxgJY(({nG|#j{+ESmS?t(kMW5dZZQ=e8(Rvaj!*HKbn3Q_&+&zv-O=%-B&B7@ z_dUjUQw&(-TU{Th!*FW)3NuH=R|5N2aq>ykE3h$UYkAqRzr;>!)zc{XSv?WbW!cP1 zeY`y!T8yxSw?3v+O4wl~H^E=_OW!hPVs$T2Xwcwd#j(`#;wo1*k1cgoyc}k~?AUr> zh2>HWoWPkniB%d$&(rsZjwqIcl_(h12jbLI!E4Y^YE6C_;jGuBy~J~OHhyc7f8J4N zjbJS5x_qrJvYy;%(Y1I#dQGaC#oMiXbQWKX!@Tl8(u`VYX_(D{x<;)aFp6vr_4aC^ zWbOAy(GLyWI zHi3L=ru9D72z-wLIcpdA4IOzcqs?P&K9xz$BfS=X{D6)J=$w?hT?<(E>jUbPi|z%i zAHDnN;aw!h`sT5r_je@HnbF=K>0}db;|{-X6i84fk>=RJ-84UZI_*nn=HZ9otC zIYfpg$jv3PQzXEUkZ%$6ZS0_yZR~8@@eOw2TVx|*ZW8<@p6#G?ijuw9jXl(?;U?#O zXr_hh*h`KTT5#|J_MwH=EWC*Qq__uD{K7lP@3=!4n*BEF&i z9sE+b^wJ;TAM%@*_endNZC$R}56Q_n=eeKzc|E6p|NHx20N%&1D&E9(1*J5`(im4U zfsfL-pfL?8TP~zEYqIq^?+w6^sh>=7%2$BuZ}86d0JY9P@T#xng=Vdd22UcFHw$`+@FR z^1D5m2o@|~U}&mhyT+2Spj%GiQN#3B3p1YX__`5Tt~2ZD^}6Ye5Y;!GYGg&=W`1f> zU(pM;?$iq9z_Xm%$aZFiH*XT?Yxt&Da-G0@5(w;%l9DTh`<-Qy$%J%`(A;b{xWRe7 z;#o$?woE5z8zFEk3TuRGg^A4@sbCisIF4y=0LXU%D0SIMgx;X;30$0Vy;@;ml|Ho1 zYK?}ph!y862o=oty;s=r9t$s{GwTm^cjXh zX6h+9R#4SoVxCLOs|Gzj6vfyw`=r8}f&~p07BwuvRPGymarr;NW3o&UQlQ|4SM5#<)D_AYu=bH`4Gxchu4G5IB)qsYhHQS|^99&n_ zn>NVCdNe|+-8Q;aJqyS;gGRl*CUAEhbWFop$1z3&^Egv8gH~5!Kg$ot)xnL4)<#Ml zj)}+GHnv^Id>ko*P923!N#Jt4zO6;c;AjkkNF!ralEn3fWmir1Pv!OKY`pFW#F4fP zm7d<7(lrU{V*qdK%j^eZU6L!-+ua!?E7BB!p)Aa*WpuW<{p~w;jV)SLbCa2oEd@7|h0@n2hLX#km z=k+%M$$b<9d=4UmUFgSd?BmJ-nmh7Cqh4I$SbD#Oc9m$OoJm9cBaiwIxc5VT_uv}N U^PT1B94h>~A^5jp8Xj{00XlWD{r~^~ literal 0 HcmV?d00001 diff --git a/target/test-classes/blockchain/query/ChaincodeTransactionTest.class b/target/test-classes/blockchain/query/ChaincodeTransactionTest.class index 61693cfed4c1c9eb4f0694c903a0b4ea08f3b2ae..584e9065e1aaa7a8ef03bdfa0c9bec31945b5217 100644 GIT binary patch delta 52 zcmaED`r35E2?<$ShFc7F49^%`7``&NG72$xGKw;|Gm0^IFiJ6aZGI|Y%gAcaz{TJ& ISzYP~0FsamH~;_u delta 52 zcmaED`r35E2?<#nhFc7_49^&x8NM>OFbXkvFp4s`F^Vy`GfFXdZhk6Z%gAcSz{Oxc ISzYP~0FjanE&u=k diff --git a/target/test-classes/blockchain/query/QueryTest.class b/target/test-classes/blockchain/query/QueryTest.class index e62b557cdd04ea29b51bd689a54fda00e9fa5198..35fa21a47ee8b20b3b6481fa5eacab9805a4144c 100644 GIT binary patch delta 1120 zcmYk5+gDU|6vscm!WPV(=HBL zscB|(x+$rcDb`cQS~D1{%VVqO9((LB=(Sa}f6!WW9`^0*>v!+prKP{sm45mAyB~l~ zzIIv44wo#wnr9uJb9mn61$H{@(&StmcDv+xQB!bu$zhMt_D1QWKg!Dt7_v`Obn)5m zvVuX)D@HlsQp-Uj4Y@=aj?ly*&8sd+ns+!HHo_4@UUPY!H;nt6nxjT3X+}nWzoCv# zo>gm9aJuTx#YZ)7Ne|MK=55Vd%{!VCQdo0bDhA)!z0p=unv))myuD_VkGR?9q(R^F2w9%p$!=nFR{&+&m|^BCnrN$C;rk;lh;qG$__MeBpKHGh@I zr+j9}dBuYM+@V~@K(4r_W7FY$VQ{E#f6?OtVtmx58}j~ee_VQ6@81DlW_Ye`!1f@>y73_Q1%zdnsM^nu??iZUSg-)=Fj1+GW*9TZFO{ExS4QmNW=|0v; zs<0HWd5{efAyEIjhA3lf>VvYPvMr zG~3}XIyH}Lx@Tk=1+6vuxPlDx@eC=lopS}bL^lqPM#Vo*U51X)~Au(*aYroocdTIy~D_gx(K z1w>SE7pv1k-S-XmecyNGc=Y&9@xC9klym*PZ|lT1#wIE7P9PE(w2VRD8^R`WA0Rr$pu=x(BvYM zi?w)(#id-P$>o}?)#M6=YjUN@RTkORTpi{bt_^b?*K2Zv;zo;6++;C>b&B;`x!GbY z8?+TwD_?^gxltW;$I? zrgP4!Wd>uly<}Ei7oTeDSnhP_6kVnwaDY}fp5-$p-mTaoTbE%f9#C{E9#lM}@Dz&` zJ&Io0y5fG>vwO>crQt@VDz@5eW2&qCjln*fhk3-^*I$=yX0c-`g=o^;RjSCzfVTQVJ+w|PfKWb-cX*}TsO?pA-?{E&}qKICKfSASXQCwywt z$Y(a6^M#haw3)(g?#MuO@mG9p^9`RWzP0&|?`?jNu^t_$9PlGQxvK-k{+|sR+?S1V zcY#^vZV${gMrqBOSwKals1?B+7)EPPxNztOxyb&Lb|b+*b{*Q>;UqhqeCo{Bw4lXc zj|uZvB)gKa)?_9XTh!T+&ZOMws;0eRm1Yw3u#Y2d%QSyvFFV0*9B;~ zCW;FN0ba&AQRCBKKlkR~c(>jxFUjLIEUtgMomX&23pS}{Nk|T=y1@R0h?2ZX<2t!~ zdA|IF9I$h>-MBfjG~aDlA_^4^=H;S71;aEQS(1;mB=XbhJW$<(u|)(Q38BH9aWK$LPes=s=G#LwJ5YgZmiUq^;w6 z82?zG6xGUv9(GL>JwSCI6PtRdiAZO)(IO!pF^~ABof|h{E~xRS+aj|F^CQ2=&FRlg zZ3V++8pSf=GVzpCL*VFDmxXqdr6#jO&ha-nL47pW%J?@+#p%psphOO5UuMa&8`zK8^0z6< z@-cJ7=%bXkn9KgsU8UR`^O!GPkK-9>W+4G-t(OBhP)>dZcX1F0qr|h0MI0g@tuFb- z9m--t(qft=942tuA^A-#mCAyEJUYUB&*2;)lQ~kX8adhigrg+kXfe$pu#=0h6~`!& zie-vs#d3wCI98ETv?$Vw6-tJ}pG;P?Dpu~4;rRM`-sPn%TJFl`rZa{NDtt`eL6 ng(CI6G;~j*TEkk9A+#UXL!{*n(R`f1KEf^W&fq@wo)P^U_!-NZ diff --git a/target/test-classes/blockchain/queryWrapper/QueryWrapperTest.class b/target/test-classes/blockchain/queryWrapper/QueryWrapperTest.class new file mode 100644 index 0000000000000000000000000000000000000000..9e060b4dfaf8819efe4b6f7c39f0f05d586611c3 GIT binary patch literal 1029 zcmZ`%+iuf95IvilFEMQ~(2_!FQ=lYisJY}V6%vgEF9rlHK|F5E*4g0NVeKICS%B15 zAn^fw6k?nNa#Q`Vvokw$=FIW@{`2D(fCd^Sir6%5@PLONpwikZu0gt8Eio#>* z4-`)#`uT=8c4?d?UnDcS?^N6g>{z_&Vu)dFq19-EXk%n}9FbDfNF##HbfFAt`7gCT zozn_<95<^Mt|rQ~)kRu;1~XNTZdtmM@^r3{=a6M&^R+XuuXM@aGM$BCP=`%-Ym|U1 zxJn+8q~gr5xJx!mvGsFgej@w+3^{k#&Yz<2;v2O3Df9{AD)K|DERiS@0h>@tgpzjH z8lj9k6zOFZYt+exj_Z__!8&E7oNkcSaq~a@GR4x*u#Iz=-=U=q+0+OIc^eeV;MQO9 COZ2t? literal 0 HcmV?d00001 diff --git a/target/test-classes/blockchain/queryWrapper/TransactionWrapperTest.class b/target/test-classes/blockchain/queryWrapper/TransactionWrapperTest.class new file mode 100644 index 0000000000000000000000000000000000000000..ca8a34f1b4287e8eda0aac64941b664604b58185 GIT binary patch literal 1675 zcma)6Yg5xe6g>+qNkiljK*aheC<=(g2Z#cKZ9xTVQCe~Q;>84`JS%Vy{<2*)ngcPqA6=9LQ)6^6E}Gdk|!zK#v)961kGg&*xMF0{3la zE5ZuH+F1PO|Bq)p4x(EnHoWXNKaGEFEM{0#|00&hQ| z?Evl1J|a;#K$7N;hm(e4s79&*t@s|D2hhoT%;;*M`!anE^fb_W$xs_G<`NM=A8igL zA_zqyk`Y9|L?nM9e%CxfEdpKCU^hC^gFf_9{RU>yk0qkv84}#=Ad)QYe z_A!EU)L$P2&SR8%JcH-BfQ#~Vr#F3!Rtd_G#yG8#n4lbzr%N=enEXZQaFZ_}Wej}6 V@ek;fCDNM_!a-${EXiua)DQW!srUc@ literal 0 HcmV?d00001