From 4ee51d86ecd181160706cf2affdd12cadabee615 Mon Sep 17 00:00:00 2001 From: Jonghoo Kim Date: Tue, 27 Oct 2020 17:58:02 -0400 Subject: [PATCH 1/9] fix get_table_rows_by_seckey conversion --- .../eosio/chain_plugin/chain_plugin.hpp | 4 +- tests/get_table_tests.cpp | 40 ++++++++++++++++-- .../get_table_test/get_table_test.abi | 14 +++++- .../get_table_test/get_table_test.cpp | 17 ++++---- .../get_table_test/get_table_test.hpp | 10 +++-- .../get_table_test/get_table_test.wasm | Bin 13428 -> 46061 bytes 6 files changed, 66 insertions(+), 19 deletions(-) diff --git a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp index f327190eee..68eff0985d 100644 --- a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp @@ -519,7 +519,7 @@ class read_only { if( p.lower_bound.size() ) { if( p.key_type == "name" ) { name s(p.lower_bound); - SecKeyType lv = convert_to_type( s.to_string(), "lower_bound name" ); // avoids compiler error + SecKeyType lv = convert_to_type( std::to_string(s.to_uint64_t()), "lower_bound name" ); // avoids compiler error std::get<1>(lower_bound_lookup_tuple) = conv( lv ); } else { SecKeyType lv = convert_to_type( p.lower_bound, "lower_bound" ); @@ -530,7 +530,7 @@ class read_only { if( p.upper_bound.size() ) { if( p.key_type == "name" ) { name s(p.upper_bound); - SecKeyType uv = convert_to_type( s.to_string(), "upper_bound name" ); + SecKeyType uv = convert_to_type(std::to_string(s.to_uint64_t()), "upper_bound name"); std::get<1>(upper_bound_lookup_tuple) = conv( uv ); } else { SecKeyType uv = convert_to_type( p.upper_bound, "upper_bound" ); diff --git a/tests/get_table_tests.cpp b/tests/get_table_tests.cpp index cddae843ed..ddf3a40f0a 100644 --- a/tests/get_table_tests.cpp +++ b/tests/get_table_tests.cpp @@ -458,9 +458,9 @@ BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { produce_block(); // Init some data - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 2)); - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 5)); - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 7)); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 2)("nm", "a")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 5)("nm", "b")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 7)("nm", "c")); push_action("test"_n, "addhashobj"_n, "test"_n, mutable_variant_object()("hashinput", "firstinput")); push_action("test"_n, "addhashobj"_n, "test"_n, mutable_variant_object()("hashinput", "secondinput")); push_action("test"_n, "addhashobj"_n, "test"_n, mutable_variant_object()("hashinput", "thirdinput")); @@ -670,6 +670,40 @@ BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { BOOST_TEST(more2_sec160_res_value == more2_sec160_expected_value); BOOST_TEST(more2_res_8.rows[0].get_object()["hash_input"].as() == "secondinput"); + // name secondary key type + params.table = "numobjs"_n; + params.key_type = "name"; + params.limit = 10; + params.index_position = "6"; + params.lower_bound = "a"; + params.upper_bound = "a"; + auto res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 1); + + params.lower_bound = "a"; + params.upper_bound = "b"; + res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 2); + + params.lower_bound = "a"; + params.upper_bound = "b"; + res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 2); + + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 8)("nm", "1111")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 9)("nm", "2222")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 10)("nm", "3333")); + + params.lower_bound = "1111"; + params.upper_bound = "3333"; + res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 3); + + params.lower_bound = "2222"; + params.upper_bound = "3333"; + res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 2); + } FC_LOG_AND_RETHROW() /// get_table_next_key_test BOOST_AUTO_TEST_SUITE_END() diff --git a/unittests/test-contracts/get_table_test/get_table_test.abi b/unittests/test-contracts/get_table_test/get_table_test.abi index 1a7cdcc213..c62be8be51 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.abi +++ b/unittests/test-contracts/get_table_test/get_table_test.abi @@ -1,6 +1,6 @@ { "____comment": "This file was generated with eosio-abigen. DO NOT EDIT ", - "version": "eosio::abi/1.1", + "version": "eosio::abi/1.2", "types": [], "structs": [ { @@ -20,6 +20,10 @@ { "name": "input", "type": "uint64" + }, + { + "name": "nm", + "type": "string" } ] }, @@ -68,6 +72,10 @@ { "name": "secldouble", "type": "float128" + }, + { + "name": "nm", + "type": "name" } ] } @@ -100,6 +108,8 @@ "key_types": [] } ], + "kv_tables": {}, "ricardian_clauses": [], - "variants": [] + "variants": [], + "action_results": [] } \ No newline at end of file diff --git a/unittests/test-contracts/get_table_test/get_table_test.cpp b/unittests/test-contracts/get_table_test/get_table_test.cpp index c35409f2ac..a27b2c9869 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.cpp +++ b/unittests/test-contracts/get_table_test/get_table_test.cpp @@ -4,15 +4,16 @@ */ #include "get_table_test.hpp" -void get_table_test::addnumobj(uint64_t input) { +void get_table_test::addnumobj(uint64_t input, std::string nm) { numobjs numobjs_table( _self, _self.value ); - numobjs_table.emplace(_self, [&]( auto& obj ) { - obj.key = numobjs_table.available_primary_key(); - obj.sec64 = input; - obj.sec128 = input; - obj.secdouble = input; - obj.secldouble = input; - }); + numobjs_table.emplace(_self, [&](auto &obj) { + obj.key = numobjs_table.available_primary_key(); + obj.sec64 = input; + obj.sec128 = input; + obj.secdouble = input; + obj.secldouble = input; + obj.nm = name(nm); + }); } void get_table_test::addhashobj(std::string hashinput) { diff --git a/unittests/test-contracts/get_table_test/get_table_test.hpp b/unittests/test-contracts/get_table_test/get_table_test.hpp index a777bfd63e..c66be4933d 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.hpp +++ b/unittests/test-contracts/get_table_test/get_table_test.hpp @@ -20,12 +20,14 @@ class [[eosio::contract]] get_table_test : public eosio::contract { uint128_t sec128; double secdouble; long double secldouble; + name nm; uint64_t primary_key() const { return key; } uint64_t sec64_key() const { return sec64; } uint128_t sec128_key() const { return sec128; } double secdouble_key() const { return secdouble; } long double secldouble_key() const { return secldouble; } + uint64_t name_key() const { return nm.value; } }; // Hash object @@ -40,11 +42,12 @@ class [[eosio::contract]] get_table_test : public eosio::contract { checksum256 sec160_key() const { return checksum256(sec160.get_array()); } }; - typedef eosio::multi_index< "numobjs"_n, numobj, + typedef eosio::multi_index< "numobjs"_n, numobj, indexed_by<"bysec1"_n, const_mem_fun>, indexed_by<"bysec2"_n, const_mem_fun>, indexed_by<"bysec3"_n, const_mem_fun>, - indexed_by<"bysec4"_n, const_mem_fun> + indexed_by<"bysec4"_n, const_mem_fun>, + indexed_by<"byname"_n, const_mem_fun> > numobjs; typedef eosio::multi_index< "hashobjs"_n, hashobj, @@ -53,8 +56,7 @@ class [[eosio::contract]] get_table_test : public eosio::contract { > hashobjs; [[eosio::action]] - void addnumobj(uint64_t input); - + void addnumobj(uint64_t input, std::string nm); [[eosio::action]] void addhashobj(std::string hashinput); diff --git a/unittests/test-contracts/get_table_test/get_table_test.wasm b/unittests/test-contracts/get_table_test/get_table_test.wasm index cc1b5399505b8370abfa52a7c264c2cbca1ba9e8..94cfbab9e59884b25a173691b86caa79018e3cc4 100755 GIT binary patch literal 46061 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 I{vqf7e~u$J-T(jq literal 13428 zcmeI3U5s5a8lLE_Z7!|N zFKll1HU=)%P_}SpjeDp2)`i}M&ECKzhGOCDU}(7RzZSY)J+vBCE&i)z9q0?*eQBkPD!*zOl4A*qmPp2O6KBzqGox0fF`QEIGGy znF9^ZZ7#V9Eg7?+-RJ$I@|i!ow%Bu%g4@4%W`1SuqrHtYYnN6R=a**g3n$v;(xMn? zuoJ*;4%Rk$26mg4-^S3=;^mq9!i3wW!F^%y_&p~_M{f_K^NVYj&aCuCXQt|zm9^Dp zZZIu$>l?kTrL{|&wzH|lIHO431`6$}0oZ5*re>2t8Rs|8FWmFa8Mj|R`R>^9Ffs!5 z&g1ulv7(0BSX%F0SUf&+EDX0sF~Q)4&GRdRrF-2QggIrhMk%-mUE+i`#~uB_H3}8C_Dj;*oqO zijwVkHvIGM;YnBVZ#w=A1XaaW8THF}hNm$4{A`(c*RR_B>hi_X&BV{o`nW0v-aS4U z`DoTv+mB4f6G>jVef-Z{)YobsaiiJyOh$}XzjM_Ukx%yJKFMR3&qUGoTiI^8Wbc`H zf|ZakF&(?noisWV??B4CxPE3fZ@KETu>IeosI^_WZmdHHXjw#F^zJ>AJXFPFBCWW0 zUtY{q2WG$tZOwVB?S7g1s9)S$>g)(1<$ON5SjLaA%vI0z%LF>gv}#{0qlYJBfpB=1 zRhRo^#$31M6CZhImdo}A8*uFB`XGu$NK}tp?)#SE@Bt=cNn&%ZxG(oHynrs20_gYw zaX{(dV2x6gu!}wC_rkR5KsV7*;BWd~$cKvJgvgAfPIlIA0+V%i*5)Up7-55-`NJhl zDcz(?W?`O_&_6d@##$TicPy`Yl0z7*_O7@;zs+g2F$$u?=!5w(ScCZDBLax4iM}Y( z|BtavvtLr2WNAFB4Q(?pF{#bM5)Z_rn~2#mHbvly9&|Nd^p8M8-r)z*e)d{Y>hX8w znJYNx*QM52jXNQZRUNcg2t{4=cE|ZIny{mzu|dR;+7ZjeT2l`nO~)yV)}Ihtr{hk| z=(x%?B8sBH15U`JeixQ;5`O!Yvq6(&(XZAomT7T6^U|823ZR>bJHjv%r#Xufgw{H= zceT#&pVI4iHv9uVdL)nnUpWG_MO&icVwoK7>HyHelt|60@op5)dMCJ+K-wlV4p?2e zh|YJT+-GPgD@}iZ1;gXuZ*vY-Y;{w_z!R3#959{8PzBi1g>1;tl4Xu1n~4$KyMqP; z(Gf$CZF9QzA>Gx?sp)D&Fyx~Qz<7d`KN*`>s#di_jAl1X;6U|4QPru|x?`ODpI&|S z)ixeTB-{3TCb0j!$_+3Yl;a{Bb>K4o-otP)m*Ggi5LS0A_hZNlSK?E#EcP9rA{`ut zZ-s%h@7umrk0m~nk*8SxaJJRgqQ1`ntihscT*B)V57vj2{Ktk0k@yz=1a)A)G^h|3 ziwe9FN9|n|h)f&BiXd4D-)Ki%2_jD?;5g@(ZUiyo%p@=T@pw05S%Mh&Uq%_u9ffmC zC9=jTq8JbhG-`wkts)#;tpvtgB;IW^+A-~$Or#bW;xIjDvH4qgE-yPuC`;M_kuacS zHHL>l5eV;eF%p~E#gEIiLotKY1REP`*!)M)Mc>(~$4%K_;Ha=t_zev~`F$b=yT_j4c zsqvghh-nxYzx^&AuA7R25j-vrXo?`kniP~2laH!oKyWGE2DP33(L^f~UCg9YaM$}0 zG^%5`Tukw``SA8z&xbp15g)*FYx(fCB+8@<-zCZu=1_&`L~;zaPm>`KXW(2sw|yd+ z;=+>$z`@uOC=5lw1(z7620M@8zXftlJsr;$tUsD`K4_xAQ%%LJ#n zOHV4-<$QwPVot6)-!J9O%>9T8=r$kRk{cy3NyO~u6}Y=jJ|yWfLRhmfE~pqjNsE7@ zm1f(~l@yCchA&BmUE;1%3N20pTiAfd)Uvv=bu=l;_S`lS@$I=QALgV6;oVXS^S zmUF-IA20pw?`_Yy;&9oiw%@P#iKBn&5C#O%_d#fDCO!uLivHXcv#R13*hIo<&qdFH z`(qzET(+e^Z1WWE4%`3Dzfgj#HNbV-I-4Poo+*|Zc;rbxQxVE=2iu-Pra={1Ya2-G zfd1v6=X!-TQtyj^^3@v3{9Lk>yCLybM z3+83U0}ewqvNp4|I@ef(rTS~MenQ37PEZAitTEkXdZ_KM$22}%FRPiD`@{{_``1}7 z2AxPmNj}8%EyMKdH^9^trbGscF}xsGW@aaCHw!4!##=z3*TQ9u)w#Uq85SIsKTPYFQ6pGIEmgq2EWj7XlSfxjB4?q&gPipic-T!hGHtN_$ouKQrSI;oGiF(<1_&5^zjbvoJf_J^+OX_`OkbvEmS8A+N>Yv3%*n{Kx>2*IbW4b1ovPhceqzOz&4**C zJJ+q#+~BYxC8x7=n*{pWMv(CUQy^V z0peWP7;L&ghFv%l4yN`)klNf$5AVR!45E?E?Kg+FHIb*eDyl`r2LkW%nxVjq^o(_?OOQ_aZpcD$&VPu2rl0E@$G_pnPiB_DFT&$i@fM@KQ(Dp|$k-c#q)K724a4HHMeRWaLb5Inp)RQg zRJpd4`QjiH#2+k6)q z3#G4IOv~!%tZKi{lG?xgx;6cDVq7NHTXiVbSQeYJ5rVPe!y4!mzpTr6@e#E}n(Uy~ zD*4_$*@4fL9V}uQSrsU4(VXJ(CrTC+(dE#gK^CaAsf!?VnJ_`%9nhGmhTW2l^rOR1 zEddB-wLK_F3X$3JF69>u**O`8Esl$0Gx2##(Ae1a-?L#5N#%<+r>}m1aC2oB4W9NM zJc{a8r+xkZgF1?2ebfINK^+Br%?Kd%zd^A72Co$AenahwWq{#dk(SnxN~;~L5v#x& zIY(nW{}mLig=+sm7{6w z+G<$pF2z!;b|yyK0h8~UF5cHD;OjGAG&!Yw zC{abIN!W$K4=3^4r5?H;JY3dU4X;!hiHtcK zzmEse`4s;f0zmS1H>*2KE!dxqps&X)bxtarIeTju4w9|YovQEh-%V%;!&zTY z-B5Uk$Oxl9Z!xb?8eNrb+@YVMOqPQVNw}6&_&6kAsXB`=q#9TAPWls?+c6z70u?%i zD%%m{w#hL=Sm`E|!~lmzcZ-}KB~p+J?>v-lS)xgF08GxV+al1QgJ4siJcM8lNaRV# ziFq5-R#6Wrp$%#WX!h2o+FOBBeeTd}xAX}7T#JYKMIm**TDF`=WisoyV z+d91}30O?K*beRtSJvrZQJF=NO_9cgY|0}hn$};4>6ArRGTu8_jGI&Gp}0bqPt^)- zd3qU%iNtgd1EAFZZwrf3I17t#MvUSNlwzHrckSv`-eJa%!)*>tS!ZDVS)gW9*r2gIW9C5hTF)>OT^+k_GN>39lz zb@(2Uo>}h_UCHWKVe~}tc|4LAXXLo(q&W$deHzpOIIK($VPwNMe8>~MI70SAYet|S zPoDtOUUwt8m@BQmS^Gk{rHWQG3SqA3i1HD;X- zA^Dm3Zrz1ONoG^>78#BrG)yvrxAjR>Wh4w2zo;&)O0SH{4i9ISQvr*iMV-|xk_S>r zCkrw0+=;q~bri(l;Z9OVJLIjgS|eIU?{#>IgW;GUN5i*)(GeGDlTL<`mNulBT2Yp9wf(+HiRbe&0BkyF0SDlO z)(ai!&J=GIJaPyA`$0yQK=vC%BNMVU=@Uqbr*u#i{AQt_PVB9qbR`z~Vi#v3nu$Vs z8+$X=+C1dD39LJUqXPj8Iv=1yAZ zbz$HexT&bcw`jTALtEXMQPnA3G1@d%8bK;qp)LRMvY@{-bTG;8c@>>*LKZiL?KNfb zI@oSP7O#WtwNLt*vKYlSA`9HbYsupG(@WYhhXE+}o4l zj@F*WQ#YL~dFqfXWjM#?ZrI7nlz}#*!%mi^$64_!?2OA*aj0^yY=sP(n7^p_N^X3O z506HDIFVcM^bChSe2S;qhpROyTjv7=fm^?PR zq09_1!y(H`(=U+-;at@I;Fao=bc@;pk}FcLjR)L5Sfw1zC(D%^^~7p5+BY_Y2$~|1 zJaJ2{B&P(}ol zruAWu`tI7%{A-9yByIAqkW)v!uOz!~aGTO0v{92e|EY&UIy*Pb-8kn@=8kbUW_KsK zv*ZC*NpDkwC;5a+f+xGyvfEyi`w4djJMmJXnup;iRS%w zCpdMMsy(B)1=bCKW@waO^by!FFddIcgyCb;4hI{|k%34-x z)a6F=@hT?YWD2tc{YL!PN={&^Q}f%jW`y5JzExr>oH~{wCk9Sk3E{qikYpN*^hZX%<+i>!2>Qki5)@oy zMhcVZxYHk@L_H74ckR9MpT{E~EFu`0b9g_SViG=5K}y_}g!o{NGFR`KDa+%E@AqD9 zThPND5xuJ)F_0iaLTRiQ%!)Mi3ucm>wm#8Q8^?mT!zz;cyGz4947`yVN)gS1G;iKS z+dErlZ=$J)jbA^pdXZd>qcXnZQ zb#36!@&_QSUpv!h-KG`{7Wh*Ezjn?qFn_+cp;dzo{zSytmnZpsY%=itb;N~*jb}Yy z)bB1@+Vl$pzi?@=wzLZ33;fB7Us<}aq@^@Z@`HgY{mseJ>N9?6(A!uLE!HW@GmUfq zeIRFQ@)mmy9{%oNxWIq(d=Em;_iAFV3;+NC From cb9f518fcc8c03e9a9c10c0f65a6feab3f32de3c Mon Sep 17 00:00:00 2001 From: Jonghoo Kim Date: Tue, 27 Oct 2020 20:49:12 -0400 Subject: [PATCH 2/9] fix unit test --- tests/get_table_tests.cpp | 16 ++++++++++------ .../get_table_test/get_table_test.abi | 15 +++++++++++++++ .../get_table_test/get_table_test.cpp | 13 ++++++++++++- .../get_table_test/get_table_test.hpp | 7 ++++--- .../get_table_test/get_table_test.wasm | Bin 46061 -> 47546 bytes 5 files changed, 41 insertions(+), 10 deletions(-) diff --git a/tests/get_table_tests.cpp b/tests/get_table_tests.cpp index ddf3a40f0a..8a291770c4 100644 --- a/tests/get_table_tests.cpp +++ b/tests/get_table_tests.cpp @@ -458,9 +458,9 @@ BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { produce_block(); // Init some data - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 2)("nm", "a")); - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 5)("nm", "b")); - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 7)("nm", "c")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 2)); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 5)); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 7)); push_action("test"_n, "addhashobj"_n, "test"_n, mutable_variant_object()("hashinput", "firstinput")); push_action("test"_n, "addhashobj"_n, "test"_n, mutable_variant_object()("hashinput", "secondinput")); push_action("test"_n, "addhashobj"_n, "test"_n, mutable_variant_object()("hashinput", "thirdinput")); @@ -671,6 +671,10 @@ BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { BOOST_TEST(more2_res_8.rows[0].get_object()["hash_input"].as() == "secondinput"); // name secondary key type + push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 2)("nm", "a")); + push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 5)("nm", "b")); + push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 7)("nm", "c")); + params.table = "numobjs"_n; params.key_type = "name"; params.limit = 10; @@ -690,9 +694,9 @@ BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { res_nm = plugin.get_table_rows(params); BOOST_REQUIRE(res_nm.rows.size() == 2); - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 8)("nm", "1111")); - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 9)("nm", "2222")); - push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 10)("nm", "3333")); + push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 8)("nm", "1111")); + push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 9)("nm", "2222")); + push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 10)("nm", "3333")); params.lower_bound = "1111"; params.upper_bound = "3333"; diff --git a/unittests/test-contracts/get_table_test/get_table_test.abi b/unittests/test-contracts/get_table_test/get_table_test.abi index c62be8be51..14d198b25a 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.abi +++ b/unittests/test-contracts/get_table_test/get_table_test.abi @@ -16,6 +16,16 @@ { "name": "addnumobj", "base": "", + "fields": [ + { + "name": "input", + "type": "uint64" + } + ] + }, + { + "name": "addnumobj2", + "base": "", "fields": [ { "name": "input", @@ -90,6 +100,11 @@ "name": "addnumobj", "type": "addnumobj", "ricardian_contract": "" + }, + { + "name": "addnumobj2", + "type": "addnumobj2", + "ricardian_contract": "" } ], "tables": [ diff --git a/unittests/test-contracts/get_table_test/get_table_test.cpp b/unittests/test-contracts/get_table_test/get_table_test.cpp index a27b2c9869..898e93775b 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.cpp +++ b/unittests/test-contracts/get_table_test/get_table_test.cpp @@ -4,7 +4,18 @@ */ #include "get_table_test.hpp" -void get_table_test::addnumobj(uint64_t input, std::string nm) { +void get_table_test::addnumobj(uint64_t input) { + numobjs numobjs_table( _self, _self.value ); + numobjs_table.emplace(_self, [&](auto &obj) { + obj.key = numobjs_table.available_primary_key(); + obj.sec64 = input; + obj.sec128 = input; + obj.secdouble = input; + obj.secldouble = input; + }); +} + +void get_table_test::addnumobj2(uint64_t input, std::string nm) { numobjs numobjs_table( _self, _self.value ); numobjs_table.emplace(_self, [&](auto &obj) { obj.key = numobjs_table.available_primary_key(); diff --git a/unittests/test-contracts/get_table_test/get_table_test.hpp b/unittests/test-contracts/get_table_test/get_table_test.hpp index c66be4933d..6515743c8f 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.hpp +++ b/unittests/test-contracts/get_table_test/get_table_test.hpp @@ -56,10 +56,11 @@ class [[eosio::contract]] get_table_test : public eosio::contract { > hashobjs; [[eosio::action]] - void addnumobj(uint64_t input, std::string nm); + void addnumobj(uint64_t input); [[eosio::action]] - void addhashobj(std::string hashinput); - + void addnumobj2(uint64_t input, std::string nm); + [[eosio::action]] + void addhashobj(std::string hashinput); }; \ No newline at end of file diff --git a/unittests/test-contracts/get_table_test/get_table_test.wasm b/unittests/test-contracts/get_table_test/get_table_test.wasm index 94cfbab9e59884b25a173691b86caa79018e3cc4..8844082ebe0cae05d6369112f82d61fecb63a826 100755 GIT binary patch delta 1706 zcmah~T}&KR6u#%)nf)8kQ5!|1?cL?4yAjgG;4W%yn5|9ipRI`xs1L3t4Ry2$6=H)1 zWrd4to-=DpA8LKsbLRYf z-Fcl2MX9dqqO8pCFY_1Zx?kD4jK6z^84k0^_=BK7 zT3`QU6RQg51GB*JJ!C)CSic)WU7zqKjhWTPVRcMjzH$)sR3`K7`(xvujo&8u{aTG= z63kb<@J}Oy^KV}sKA_I(CGHa6-a0<@jeBIr4O-=gv&=4MEWw%7t+;KOw#>K8r!A+! zf}PfHnDtT^%tg+*XLoKe>RbWBDQ4CJdm_S1nB)?YqDFFrNU@~AfK_c<>`sOr1)^x2 zq>xz1VuD4mx**qNqT$vQ@#J}~iC!R=+pb=2FLdT8S9>YHzn4X=?r%F81fnfR7`CN+r}6Ag}tV_3`~ z0F7{vL26b3a+K$Rfw`!SKWC6D$H=W|W}AJKit==r1|oLkU~3VXnRgpGzGy^XV3D0k zu?`DFm?5sfa%;OC!6{i7c~=t%7E6slGz5`CGOYJ#qG7T$bGb)=oD0k@Va8FPraRCA z>hG4iqAV0jK{!>|>r3#s^rc!b61U9}r0tgKVjgassYMTeuT&8w&kiKysLLWUGqN11xBt=|;45C~!nT6j^o*H&! zNcwX_+=9!bA{O?0n+gY|hAm#Nu6kN;azd%r#lGOhz9L%6fAnEkdYsl*xS>$0?F#)% zuhJjDagxG&*_cqVHsiif>bWamEV~K@&QOz^fm9MowO`inwza(l>aOMwV6XdU^W*S; zOS%BBspgCg2i>{MQE;o;HGuukxUMRlq z5G`K@%rVdAnd2_({(@J01fbIqj^haq3yG(g1j%bmJ)-3^i-l2DxY4jKwXjc}-?P#o z`P*UNrLg7Sm=A`qUv=NU%>Q})TB)^LrGgjbUH{Z_#kOETTn{Wxr{?!$VMuj%JqG=1p{o{#-SypL0IvG^#T{^1rC*xI z^yZ!|u+JUp*#8_@NMEU1-M2jF-b1Fczf^sCF;c3` zelJNc)R*;xCiIobzlNI-Dvh(%a`EN(AVm=H6jK&)p5rD0UR2qtpET3 delta 626 zcmXw1T}V@L6#t+9y?3{DUEb0Mv6X+A8;S@+azzyFS{BqpL@!YfwL-+v!Y_;nnv^Ii zrtPe`Pv@LVg-GKsn@vC&0|vZK*owa|5fv1DEu>N)Ozhe(5CyG~ zDr2a@h#jv*%Kn+h4Ddwlxb@#-M|U(&dZGr&C!#Nbn@27JOkh*89m4n}`4-0T@o1Zo z>qvQxs6gtSp_n(OkLHy>93Rr>Kb)C?e!h{p0ML&cnOg3jcn-n_v-0Cpr!2Ih8sB6q z<;^9c)azn?&ehBMsT7x!;E{P3e8a8mUgMUfxep+%t`MaPgV}1mRL6YHuAKfeVq-%) LA)0QuorL@aK%?g; From 8d99a508aeface7a99abd4d8a79b1fd31a150e98 Mon Sep 17 00:00:00 2001 From: Jonghoo Kim Date: Wed, 28 Oct 2020 11:35:57 -0400 Subject: [PATCH 3/9] added get_table_seckey_test --- libraries/testing/contracts.hpp.in | 1 + tests/get_table_seckey_tests.cpp | 98 ++++++++++++++++++ tests/get_table_tests.cpp | 38 ------- unittests/test-contracts/CMakeLists.txt | 1 + .../get_table_seckey_test/CMakeLists.txt | 6 ++ .../get_table_seckey_test.abi | 71 +++++++++++++ .../get_table_seckey_test.cpp | 18 ++++ .../get_table_seckey_test.hpp | 43 ++++++++ .../get_table_seckey_test.wasm | Bin 0 -> 39691 bytes .../get_table_test/get_table_test.abi | 29 +----- .../get_table_test/get_table_test.cpp | 26 ++--- .../get_table_test/get_table_test.hpp | 11 +- .../get_table_test/get_table_test.wasm | Bin 47546 -> 13428 bytes 13 files changed, 251 insertions(+), 91 deletions(-) create mode 100644 tests/get_table_seckey_tests.cpp create mode 100644 unittests/test-contracts/get_table_seckey_test/CMakeLists.txt create mode 100644 unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.abi create mode 100644 unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.cpp create mode 100644 unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.hpp create mode 100755 unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.wasm diff --git a/libraries/testing/contracts.hpp.in b/libraries/testing/contracts.hpp.in index f67c6066a3..3c0fc87cce 100644 --- a/libraries/testing/contracts.hpp.in +++ b/libraries/testing/contracts.hpp.in @@ -51,6 +51,7 @@ namespace eosio { MAKE_READ_WASM_ABI(deferred_test, deferred_test, test-contracts) MAKE_READ_WASM_ABI(get_sender_test, get_sender_test, test-contracts) MAKE_READ_WASM_ABI(get_table_test, get_table_test, test-contracts) + MAKE_READ_WASM_ABI(get_table_seckey_test, get_table_seckey_test, test-contracts) MAKE_READ_WASM_ABI(noop, noop, test-contracts) MAKE_READ_WASM_ABI(payloadless, payloadless, test-contracts) MAKE_READ_WASM_ABI(proxy, proxy, test-contracts) diff --git a/tests/get_table_seckey_tests.cpp b/tests/get_table_seckey_tests.cpp new file mode 100644 index 0000000000..09b71a7b17 --- /dev/null +++ b/tests/get_table_seckey_tests.cpp @@ -0,0 +1,98 @@ +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +#include +#include + +#include +#include + +#ifdef NON_VALIDATING_TEST +#define TESTER tester +#else +#define TESTER validating_tester +#endif + +using namespace eosio; +using namespace eosio::chain; +using namespace eosio::testing; +using namespace fc; + +BOOST_AUTO_TEST_SUITE(get_table_seckey_tests) + +BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { + create_account("test"_n); + + // setup contract and abi + set_code( "test"_n, contracts::get_table_seckey_test_wasm() ); + set_abi( "test"_n, contracts::get_table_seckey_test_abi().data() ); + produce_block(); + + chain_apis::read_only plugin(*(this->control), {}, fc::microseconds::maximum()); + chain_apis::read_only::get_table_rows_params params = []{ + chain_apis::read_only::get_table_rows_params params{}; + params.json=true; + params.code="test"_n; + params.scope="test"; + params.limit=1; + return params; + }(); + + params.table = "numobjs"_n; + + + // name secondary key type + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 2)("nm", "a")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 5)("nm", "b")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 7)("nm", "c")); + + params.table = "numobjs"_n; + params.key_type = "name"; + params.limit = 10; + params.index_position = "6"; + params.lower_bound = "a"; + params.upper_bound = "a"; + auto res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 1); + + params.lower_bound = "a"; + params.upper_bound = "b"; + res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 2); + + params.lower_bound = "a"; + params.upper_bound = "b"; + res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 2); + + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 8)("nm", "1111")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 9)("nm", "2222")); + push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 10)("nm", "3333")); + + params.lower_bound = "1111"; + params.upper_bound = "3333"; + res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 3); + + params.lower_bound = "2222"; + params.upper_bound = "3333"; + res_nm = plugin.get_table_rows(params); + BOOST_REQUIRE(res_nm.rows.size() == 2); + +} FC_LOG_AND_RETHROW() /// get_table_next_key_test + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/get_table_tests.cpp b/tests/get_table_tests.cpp index 8a291770c4..cddae843ed 100644 --- a/tests/get_table_tests.cpp +++ b/tests/get_table_tests.cpp @@ -670,44 +670,6 @@ BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { BOOST_TEST(more2_sec160_res_value == more2_sec160_expected_value); BOOST_TEST(more2_res_8.rows[0].get_object()["hash_input"].as() == "secondinput"); - // name secondary key type - push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 2)("nm", "a")); - push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 5)("nm", "b")); - push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 7)("nm", "c")); - - params.table = "numobjs"_n; - params.key_type = "name"; - params.limit = 10; - params.index_position = "6"; - params.lower_bound = "a"; - params.upper_bound = "a"; - auto res_nm = plugin.get_table_rows(params); - BOOST_REQUIRE(res_nm.rows.size() == 1); - - params.lower_bound = "a"; - params.upper_bound = "b"; - res_nm = plugin.get_table_rows(params); - BOOST_REQUIRE(res_nm.rows.size() == 2); - - params.lower_bound = "a"; - params.upper_bound = "b"; - res_nm = plugin.get_table_rows(params); - BOOST_REQUIRE(res_nm.rows.size() == 2); - - push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 8)("nm", "1111")); - push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 9)("nm", "2222")); - push_action("test"_n, "addnumobj2"_n, "test"_n, mutable_variant_object()("input", 10)("nm", "3333")); - - params.lower_bound = "1111"; - params.upper_bound = "3333"; - res_nm = plugin.get_table_rows(params); - BOOST_REQUIRE(res_nm.rows.size() == 3); - - params.lower_bound = "2222"; - params.upper_bound = "3333"; - res_nm = plugin.get_table_rows(params); - BOOST_REQUIRE(res_nm.rows.size() == 2); - } FC_LOG_AND_RETHROW() /// get_table_next_key_test BOOST_AUTO_TEST_SUITE_END() diff --git a/unittests/test-contracts/CMakeLists.txt b/unittests/test-contracts/CMakeLists.txt index aad0a93219..8c45188fbc 100644 --- a/unittests/test-contracts/CMakeLists.txt +++ b/unittests/test-contracts/CMakeLists.txt @@ -11,6 +11,7 @@ add_subdirectory( asserter ) add_subdirectory( deferred_test ) add_subdirectory( get_sender_test ) add_subdirectory( get_table_test ) +add_subdirectory( get_table_seckey_test ) add_subdirectory( integration_test ) add_subdirectory( noop ) add_subdirectory( payloadless ) diff --git a/unittests/test-contracts/get_table_seckey_test/CMakeLists.txt b/unittests/test-contracts/get_table_seckey_test/CMakeLists.txt new file mode 100644 index 0000000000..5fb8e25366 --- /dev/null +++ b/unittests/test-contracts/get_table_seckey_test/CMakeLists.txt @@ -0,0 +1,6 @@ +if( EOSIO_COMPILE_TEST_CONTRACTS ) + add_contract( get_table_seckey_test get_table_seckey_test get_table_seckey_test.cpp ) +else() + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/get_table_seckey_test.wasm ${CMAKE_CURRENT_BINARY_DIR}/get_table_seckey_test.wasm COPYONLY ) + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/get_table_seckey_test.abi ${CMAKE_CURRENT_BINARY_DIR}/get_table_seckey_test.abi COPYONLY ) +endif() diff --git a/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.abi b/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.abi new file mode 100644 index 0000000000..94ee4f2021 --- /dev/null +++ b/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.abi @@ -0,0 +1,71 @@ +{ + "____comment": "This file was generated with eosio-abigen. DO NOT EDIT ", + "version": "eosio::abi/1.2", + "types": [], + "structs": [ + { + "name": "addnumobj", + "base": "", + "fields": [ + { + "name": "input", + "type": "uint64" + }, + { + "name": "nm", + "type": "string" + } + ] + }, + { + "name": "numobj", + "base": "", + "fields": [ + { + "name": "key", + "type": "uint64" + }, + { + "name": "sec64", + "type": "uint64" + }, + { + "name": "sec128", + "type": "uint128" + }, + { + "name": "secdouble", + "type": "float64" + }, + { + "name": "secldouble", + "type": "float128" + }, + { + "name": "nm", + "type": "name" + } + ] + } + ], + "actions": [ + { + "name": "addnumobj", + "type": "addnumobj", + "ricardian_contract": "" + } + ], + "tables": [ + { + "name": "numobjs", + "type": "numobj", + "index_type": "i64", + "key_names": [], + "key_types": [] + } + ], + "kv_tables": {}, + "ricardian_clauses": [], + "variants": [], + "action_results": [] +} \ No newline at end of file diff --git a/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.cpp b/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.cpp new file mode 100644 index 0000000000..d3527e2530 --- /dev/null +++ b/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.cpp @@ -0,0 +1,18 @@ +/** + * @file + * @copyright defined in eos/LICENSE + */ +#include "get_table_seckey_test.hpp" + + +void get_table_seckey_test::addnumobj(uint64_t input, std::string nm) { + numobjs numobjs_table( _self, _self.value ); + numobjs_table.emplace(_self, [&](auto &obj) { + obj.key = numobjs_table.available_primary_key(); + obj.sec64 = input; + obj.sec128 = input; + obj.secdouble = input; + obj.secldouble = input; + obj.nm = name(nm); + }); +} diff --git a/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.hpp b/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.hpp new file mode 100644 index 0000000000..ed06fb7262 --- /dev/null +++ b/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.hpp @@ -0,0 +1,43 @@ +/** + * @file + * @copyright defined in eos/LICENSE + */ +#pragma once + +#include +#include + +using namespace eosio; + +class [[eosio::contract]] get_table_seckey_test : public eosio::contract { + public: + using eosio::contract::contract; + + // Number object + struct [[eosio::table]] numobj { + uint64_t key; + uint64_t sec64; + uint128_t sec128; + double secdouble; + long double secldouble; + name nm; + + uint64_t primary_key() const { return key; } + uint64_t sec64_key() const { return sec64; } + uint128_t sec128_key() const { return sec128; } + double secdouble_key() const { return secdouble; } + long double secldouble_key() const { return secldouble; } + uint64_t name_key() const { return nm.value; } + }; + + typedef eosio::multi_index< "numobjs"_n, numobj, + indexed_by<"bysec1"_n, const_mem_fun>, + indexed_by<"bysec2"_n, const_mem_fun>, + indexed_by<"bysec3"_n, const_mem_fun>, + indexed_by<"bysec4"_n, const_mem_fun>, + indexed_by<"byname"_n, const_mem_fun> + > numobjs; + + [[eosio::action]] + void addnumobj(uint64_t input, std::string nm); +}; diff --git a/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.wasm b/unittests/test-contracts/get_table_seckey_test/get_table_seckey_test.wasm new file mode 100755 index 0000000000000000000000000000000000000000..7cfdcef92c926389a6b7b8adc2f065ea7a449cca GIT binary patch literal 39691 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 N5}Ak#*Wd2k{||kLB~kzY literal 0 HcmV?d00001 diff --git a/unittests/test-contracts/get_table_test/get_table_test.abi b/unittests/test-contracts/get_table_test/get_table_test.abi index 14d198b25a..1a7cdcc213 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.abi +++ b/unittests/test-contracts/get_table_test/get_table_test.abi @@ -1,6 +1,6 @@ { "____comment": "This file was generated with eosio-abigen. DO NOT EDIT ", - "version": "eosio::abi/1.2", + "version": "eosio::abi/1.1", "types": [], "structs": [ { @@ -23,20 +23,6 @@ } ] }, - { - "name": "addnumobj2", - "base": "", - "fields": [ - { - "name": "input", - "type": "uint64" - }, - { - "name": "nm", - "type": "string" - } - ] - }, { "name": "hashobj", "base": "", @@ -82,10 +68,6 @@ { "name": "secldouble", "type": "float128" - }, - { - "name": "nm", - "type": "name" } ] } @@ -100,11 +82,6 @@ "name": "addnumobj", "type": "addnumobj", "ricardian_contract": "" - }, - { - "name": "addnumobj2", - "type": "addnumobj2", - "ricardian_contract": "" } ], "tables": [ @@ -123,8 +100,6 @@ "key_types": [] } ], - "kv_tables": {}, "ricardian_clauses": [], - "variants": [], - "action_results": [] + "variants": [] } \ No newline at end of file diff --git a/unittests/test-contracts/get_table_test/get_table_test.cpp b/unittests/test-contracts/get_table_test/get_table_test.cpp index 898e93775b..c35409f2ac 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.cpp +++ b/unittests/test-contracts/get_table_test/get_table_test.cpp @@ -6,25 +6,13 @@ void get_table_test::addnumobj(uint64_t input) { numobjs numobjs_table( _self, _self.value ); - numobjs_table.emplace(_self, [&](auto &obj) { - obj.key = numobjs_table.available_primary_key(); - obj.sec64 = input; - obj.sec128 = input; - obj.secdouble = input; - obj.secldouble = input; - }); -} - -void get_table_test::addnumobj2(uint64_t input, std::string nm) { - numobjs numobjs_table( _self, _self.value ); - numobjs_table.emplace(_self, [&](auto &obj) { - obj.key = numobjs_table.available_primary_key(); - obj.sec64 = input; - obj.sec128 = input; - obj.secdouble = input; - obj.secldouble = input; - obj.nm = name(nm); - }); + numobjs_table.emplace(_self, [&]( auto& obj ) { + obj.key = numobjs_table.available_primary_key(); + obj.sec64 = input; + obj.sec128 = input; + obj.secdouble = input; + obj.secldouble = input; + }); } void get_table_test::addhashobj(std::string hashinput) { diff --git a/unittests/test-contracts/get_table_test/get_table_test.hpp b/unittests/test-contracts/get_table_test/get_table_test.hpp index 6515743c8f..a777bfd63e 100644 --- a/unittests/test-contracts/get_table_test/get_table_test.hpp +++ b/unittests/test-contracts/get_table_test/get_table_test.hpp @@ -20,14 +20,12 @@ class [[eosio::contract]] get_table_test : public eosio::contract { uint128_t sec128; double secdouble; long double secldouble; - name nm; uint64_t primary_key() const { return key; } uint64_t sec64_key() const { return sec64; } uint128_t sec128_key() const { return sec128; } double secdouble_key() const { return secdouble; } long double secldouble_key() const { return secldouble; } - uint64_t name_key() const { return nm.value; } }; // Hash object @@ -42,12 +40,11 @@ class [[eosio::contract]] get_table_test : public eosio::contract { checksum256 sec160_key() const { return checksum256(sec160.get_array()); } }; - typedef eosio::multi_index< "numobjs"_n, numobj, + typedef eosio::multi_index< "numobjs"_n, numobj, indexed_by<"bysec1"_n, const_mem_fun>, indexed_by<"bysec2"_n, const_mem_fun>, indexed_by<"bysec3"_n, const_mem_fun>, - indexed_by<"bysec4"_n, const_mem_fun>, - indexed_by<"byname"_n, const_mem_fun> + indexed_by<"bysec4"_n, const_mem_fun> > numobjs; typedef eosio::multi_index< "hashobjs"_n, hashobj, @@ -58,9 +55,9 @@ class [[eosio::contract]] get_table_test : public eosio::contract { [[eosio::action]] void addnumobj(uint64_t input); - [[eosio::action]] - void addnumobj2(uint64_t input, std::string nm); [[eosio::action]] void addhashobj(std::string hashinput); + + }; \ No newline at end of file diff --git a/unittests/test-contracts/get_table_test/get_table_test.wasm b/unittests/test-contracts/get_table_test/get_table_test.wasm index 8844082ebe0cae05d6369112f82d61fecb63a826..cc1b5399505b8370abfa52a7c264c2cbca1ba9e8 100755 GIT binary patch literal 13428 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 literal 47546 zcmeIb3!Gh7ec!tu=e^I&Y&|V$4BqEpgA6tqy+#r>_3QyZae@GckTkc_Xy(Y8hi0UC z$TE>NV=Nq{mlP#U8j`d@(4+=p_v&+@g$8mxRJnoNkX)sd50K;rk_xG?yd= z-S6+e_CDu~G_ozAA-$g~`^?#U?X~{vzy9y_Uu&=9jm#bKJ3|?`-^A3cIi;Mmu zU#AxRQwIv%EqVt$E(3S5s0%6ti;sH;ii@ZC=W%n=J5bQIp78gi{e7GVJT2*gH7eSb zz`LsIjD|qrtEj#lXm#ywL5Ql}0bdV%tGu{)ipPd0Se;zVI^*$4T>?V=x?;7846ggb ztqqCqN?xontAFtJg8y9J5w@m}$D<3gv#sg*{j;sn*7)((tXEKRy)`p8KC^#hZmu;u z?-f;49630{wWsUSk=Bv9*1YHIrp(Qend2>Y7mtk2kIzi+9~+q;**`b__Lf&trFgbA zGPb|#nODvMjUIi>HSO8Izjb21H9aY8Z%x=@mf6#*epw(4cj!-GIBPPIK<2 zJ9qRxw{WoCu)cr){OrQ?==`BEx~r?ZPSG4iJu0dkogJT^pW8p>MzE%v*84|i##&yl zs;wD2xPNNq(bnw2nT6@G{o{i>uO7gds9<&L)Sa83nQd9MJ~i*9XngF%;7<3zi&fa? z3b$?F(_OmGmF^##SvWY=>VC2*dondM{m3ehYdnTu*6ErY{?Xai@$s33IV&|Ts~Q}z z0uz}YCs_OE4v%c#HR!EX)2LIn&6RZ3+O=)FD~q#Qv*SlwN5-}d4!Gh{H>4^eF?V=s zetd_wPLK;c%s{GM8&>ryAQ3u%9MA5bY(3_!SIYz;-+ypwW^{7&@W}Y|{-YzaBS%{E zt=Ty)M<-ijj)RE?_q^4N3>yXQ=ho{;SKjkE@6Cmw)b79d*$@Be zJO12@Z;JRQhBHMpZHuf{D{Z? zke4prr>E)JWiR%lB#i!%@A~u;Z>s5E)v>RRgNbIiqGQOGcU;Ii4%KnNbsXj$3xh_W zj)SW^?hKN_i4EbF#ESwi8ub0emoeVSCgp=corln%zBTYVLtPqDsd`SmyZL_CP*n2L z4}8*#&IEqR2nf{0iDUQlc=6tJ;~uSbWArkLLr_O z9_aDh2;$dhMDbqwp>O&yA~Zrt!VW)J1Vumb`Wt>Q6w(p`cs+jVH6Y;D;A3esxTgm? ztns|M7ttQNCtkce`iO)m@zhNJ0VNdib#cr$Lz2YAeN30vQy3_Ml!0qws z0T_pfg^iYq(N6@zI!L|yM5hdO@h@l;>ZULnNBbTu>7`K&scPd&ijo3VhJFY;VECc~ zc%^~zEcNe&UG+AWm4y2%%d;+&%%yQ)^L##|SLdFC2y(FAll?FWmUQl-h ziDDrQ5oS6nsG|(&po4Ufb(iB<0OMvsEmALf0E)nFi4CmqObW!pX2Dq1WW+uoWl-|= z8nL9_=vzpNlTMnX$QhIbfQ%tb#6}5pD0I2i7d+1Zm_WV5w|2CIIFo6xkOZh}qFTYc zX_|GNgaB9p(+LcqksHT`Hc}eNjo@&{YN&VNy#nDTl_AB|(h5C6+S3T4@9{E1I3|dd zeuoLhxemzdF+myt6ZDla!HAb}K5u^&6RM0mm5xVtCE`bQFa5+Pz4*TL*D#nRVUIX^ z(Z{6>!BG5wdhnoFj_gCJcfaTtKe)xjc5AR+;&}7-s!+~Icek$bz5H>Z$-uV;m8Nmd zcsKb>YGqs31XR=0Js1{5E*O$w`E+VMis@T}8|Y8fU$8gV#b^F|b`cS2JQO|Qn*o(+ zc(Cas)QLa)8t*|js_W8BG#m_WCaUmuhq0^d(YzqrmO#BUky%d{&0aI$J2dJ63kE7Y zCni8F(*F7MmW5~t44n7$Z>32i5WM*NGC;%%#)SlCVXY{|O!ncSX&+DA3asefAYfjp zZg+=A`JyZM=;$0yKGQ7h4o?8n-$!G*{Q-lFCO?gTJ8T$&&*A7(e&C;yIO)H{yFEPG zv?g4gNch8qw;yX_wTm(MidtvgKAGH2K z#QMi(gEFzoVdRQ_Lp`OYS#zFP@9oAIv1d*)90_%R>BNf3(%owygV%T{a1i}w6o!jM zX6$Y#2G&n+wP-=M-IJC8z#*is!!lPg#d7(DqyWgQ|M*RfLX`TABJ~StqK*pbqZ4WI zfkrV(il_sYw`32$pHLtT=!LstZ|M18lVX@@aOb`KR_R6enBhDlM^;D&VEc_>?693p zzpj|)#+s&aL*dQueA1hM3~Bs8PXTBmQWNJSGHDc09!eP-C>-`0Ww|cNcIWA^g)75e zyw9$Df|5$Zm*4f%TH^O3743c;+0@H5eMrmVeOXNCAf+{2n(H*(hgPN4H}r%s0ym!& z)7q5S<&Z|=UIc>^BC&~#$2mL?NI(1GKl+US0MZVtpJj+yN418Zl!t4lnw2DYrddV8 z-`W%0s8A)9qLgCO;X7vncKWY2t=89$*V#!P>hoAI|YsX3pf z9A|ww*Ftm#ulSurz>*C5bHkXN{tjazGWFdcIi8Nb(^!ZUl^ez)B?Qj7XmLDZhDs^0 zZX%A%J8jNuA-kq1NNv#Xg0cAZOiCuAnGHHRh?+&hs-xIpkyav29cd~RtEZw9s@y^2n zgj^Qda;X?2lgltENG|zPnbcp>44O+J)QrOs&e7}g;Zw(%9hUrI^O{B>N zfNi75N7F(c4j}NlV_sVVqmqbJ7Lj;{Hcceul&0l$$$y}qI0{8)s)C9W5|P0W0P+zc zr8Q`l6emFhDu9+oLleM2pkTkxRkTS|xmcd~W~pNH+Shyb@6zJ?8`5JxeZn+ksiJ99 zK#3ytH;}{3R-7iHLFl)5B+pAir1tb z46^pB9mQ+SaWgxE!^QNnXIR-#z>4{fP;p%!wJDs9wvsopkzBGyRT`NcSX%!0vZpbn zU$xeRrsCEaa)K2N;Q-VGff|G=rWa`o8rQb{f@>SK+t$=}pYm$e_K5Nhz0-_6TCKSL zxTyH>vyV4>h8Mpdo^bbgL;Y8h8p0Sl_F+)7Ty0MhogVhyY{(@miLtdqiv(IQUyX+E zKGUcsJ;VM}jUFjLK?OZvNI@0XfPv>u*nvnyDJ;Ggo1~(NHweKRrGt`^=-UH?2$Af@ zXkaBqdpZ~mWZdac=dBu@!zi>KAb&xKfr4QOT5SRnSb{6=3Z1g4b;Se)4iWQ1v<}Sy zg;XRZQ#VMJgSc?F@%+P`*Du*(l)QNVF^ZKACeJf5cu{{D~cfMwnA0`9}&=^9jfJqRyC1>{0bWNTV z<1mLOglSgOKlwFJYd?)zQcW*q*HNZ#6@^RHq|BF6MNC62qVbX{@l2y?KuHxJ^${^615SEQ=-X3%pj#l6r3;@H{`rF}VhhEIme|>}rZX zzY=HM-b(IN(vMVTPU8}`37;%8a8FOqib2*9089|{!wWKa1C^DHA%h*X{m3uDS7~#RDS1n|9)w9y=)%4ZK z-muq*d8(u*kGgCJoP8r$N9iR2wZ{Qn(o3bRcZQDbRxX%Q{(1Iq=T_Tc_d?nn6OfWAA$b-`l zUO5&&>gfkr(vlGEeXze#H5wF$%ik}$CTr8e{6u3d^#EBMzFDQ_#@8on+M&SmHxwti z5TP2^xFUQ(B?p@8t+G?o<{Fg^xq7b1S}|!TCF}Gov6k5*7r2V>w zM9|ia$kG*uh$8R|<^fl&3n&kBsE}cUI^NePF;f`!Pm&E0^%?6*@wvX}II&53Z31!~ zwK9_ChK@;22HaUfB|=nIO;1TtOhc6P(fBVjj-HQZb4t&9e_W?9o4=URJBrb(JJuM( zio+*PHr7C7@vX5I9{DF>!kQn#p001KNvakS*8zMV8F5zJ;#PA_X1EB+7T?^1{{$bz zYfWath_ek}hizv;f%y%28)|Cl2F_GfkT<%@*h9~?#xTO+YX@}3w~*fkv_vwfUeSnR ztwHn;2TvtyP7WV9NigXpwaI6-GFeE^3yw+JIj-Q~dF7%hb(|eu%!2Lb^0=A2o2s2t zHJYqiEl)AKES;O68d7H+QXo`If8o@`GjHi(!VQVFer^JNp4=Gn)=`Kn&n@DMx{D;5 zn*GqdtISj3&9ntL%}T#iAO(;^EvfVapeW-|bZv5(wPA#Kn6-p~G+umgwz*d8t!|oC zOcRmmB-$1|t7X(RPd70u%nL9ZQ5`vt(yxKIpq>R2N5%Jq#)23YZd3D8fN2X?Er}+YH%&G+X%k<(>w1=%+M5AaypCnY(J&C_C$0*XQOEj?TV}Z9JOj;L z$GB(uzhUc~F~9+{z+Divp1URKb;}A>R^}ROrQ+^CdVcl2%|17ifJrRFiS!%z^rPIM z!TLy}KP%djq14x&tZ#;AC9^}DHH(AF_dx=zcS-iC#LzaR|E*7RGPzxxf9dJQ%}Fn% zBv~zp?6;6AvAuP*sR_d`N^VZJBz^thT~F3xXGB;S*l#W!P}O^z)&53*vLUHXG&aZz zWxlmH>D?M!zB~2FTJ!b$@Aezo5CR@A)C zpIj80IPjyr+k>RAb%ha)}ldQ5hvN9OVFsv@@Jl#h58qkVSx3+cTR%UuxSK zGU-x`OEMsoW(K64DR8s%WmoB2aSP}_x6PrN{9I6!bYWx3b zr>m}2NGtQrrQxc4GXy2i19P--C=Dz~Orql=0C)qg8uxN_xvlvZxnf+GHRYz%p=2Xf z2`yZSd1~r*qkOU5xeVi}BhNV7e6EmNm9ty{`szifTDs?cRZZ`(!+ZagkAbo#Yk$Uzs zvB%(NnrT}d8x`C|MVk+t!D|vzzmX(EoqA=3)dT|QW`r^mz;8f5o|b7zwxm@hcD5vI z1$b?`hA)aSE{f-1Tzjxf#R=)FXI#GI26b73qKZRW99fd}r>ZM4-cq-FP?t0)n>DR< zqk$}dcHZJ*cPHn$0pzkkQl-<$MU_ystCMrOOV+Y^Za!Uh=@WC}XB~|5Y5}|sjB_fn zR`O3Ij&WM~b0t3UR7FG72Cd*Vi6G14SiOF-kLgRzP9~L10nV0k1vtl*8_W_{5>lY0 zly>?)s}fpt;eQ!C*9!UfbRmDqA-|;R0P6s_EaYj@1%SHl&LMwE$fKIZ?uwc4q?ZLk zD$qBiwfw>P*-lmU1^)JLN%+7wQ|*2UozaN{`p_|%g>qH$u3=k;Q9@g zzWf`1?YR!@(lx--2%*(_xN_xh{;l<3GT?)lm8e~X5Q~VF2bPM0+@g6!+GD6@lAn~1 zH#V~kq&&~g^F|2c8B{~E-pk-5A$>`oM&C!x1OeAhTjMg*#rEjoI?9c_5j0;%JyHJIpR=>P5Q_W*1dLgD%Xd>+YO+UamIQ!L(|cVbaD7Un%Ll8Z*LD z^I-J2j&S`Nx}CcgyR#0v^TOqP-n;S3riyt9b3v#`UFWkdR~)rf2MC=pEvbZh*_d=k z-R?16u4qh*Dqxz(Oi*4DF-pA$`*EF>B)T7QChht)PZ0+$y)u#I9|-=xOmc8C{)d)^ zxa4qHRvMN{84ip)-Y@*WS|O{&_oYfhNucxHV7^9LDhG2BFf>xt^8!W14EYi6&UKz% ztTauKzfftei8WU~%d_>Q321pvEvcKeG~vzfvM_;Rqd#!S=Cyo7(m><4U6687#?ro| z9|bi6$!BC{4d?M2|N75-63P&csU0GLBS!>O+a?O<*i6=r)GyxcGBsx@EGBCVL-xL= zRO-eszawkH7|xdSK(;Sk`akGRh5}|X$~NGyW`Hku0556iRO$lEQ+MY8Uv_|j(s+qU zbB?<7AKn4$B^iq^W$@2;;4cet>U6>9X*c}y8GO{M3sjEk#SW-T0!5uJP(1AhbrDdS zxc#{n^ffNmxGS%6cZ^sNzyj*_@JyK}UhGm!mx<#b_KLa^gs+z@wP7^A%*0w{m#8bD zqrPd@MHd5JQV7R0hmwTL1dXQ|k|w4XOJ)_c1%f?<$I?^DO_MBgLRty``uJd;ued!eEyZ+j^xjdzmEvY5-iS*qhV1xUP;V;Pk%4HSOPdl`&$7Om{T%y4-TnlppR=XyW zO%~shB1p8>@8?@EHOBMV7=w6JwE9@dDZ+UpL2ta3J6!$jGgMA38nHdDQs*MCKu^rElwE}p}DeT3_>_ZX>$KDg0cx` zsHwKb>GMVPMKcH2<|pUf(_w8PtM>D?jxT$1jwc&o7CkPj-EzB~IzP)(o}AYcV05rQ zrxMy`eW>n|t9w>YXqVLmb}Tob5d}?&2=&~vW;U4i_EbT+OcFrJ=i<|j@?ZBI}S8%UpWUm}ZCbX3<&=QIk8Q6#TCN>+Ww)+pU zVYxWWmy5$}xwr!^)Q-FiT$q6i1x}mA4IBxkfTd+~U?gi;e@%SJE*;9iA(Nq!HogJs z35K%;d~(LxP^A2h;wT0fYLmLpbx1sAt=LBHmUCb9$N-YzAjoX0w0-Yks!i{f&7qrT zENXC%)YCI~+}bJ2kb(P)@2WJs&!yF@E5jZc8~#`Ce&^>u_3!@6zwqCJT4kg1LZkN$ z02j47nueU=YFWoT>j(i za5%?yu7LfYfi`!z4XRtXVNdE0!x`eoyWHI-cemauqMZA<&)WF$SQ6YG^6HMhkQav0 z-WLsIjIf^sdUcFHnwH3{PlARZ{^4k8`&v;pJWM$b>bee~9^K<~Xi zJGpHuoRAAaIqasLZ6W_*=CMo&?&1-Y+~n@oTScRtb|66Sz>o_?J2ofT`ZTm-u?MOp zKL1e$?buLG+l+Q4XjjT;*ESSvC}MxQqhRz|zYw@>EMoAb)fo(DVX3`$2I(EUwFQ~( z9V=`LvY5|HT?5zMf{gMG2C$#eTt_IdN%_Fqo02=iAdz5gr&&@Mh0vCqP!Po-6natS zk_kn5;%RIq)-+xEcc1^BX*Tofdx{sG zo##xi{1Z|`u5Q4FG&ZHDenW{CHVb*EaKI8=y7a%Zpd7?y-hcHI=2PnP>~DM1Btx!T z36G^;;c{g~IwaCi^RIYQlY;S0Rcr&|Ihk9mjNnXh$Up}W&bzBeDiY;kM6M60G7>n1x|bWBK%Jr&n~q@EMK8w5s&;3aFD4Z+L0xv|$g%?Q62J zp6O@sG?8I0$61W1mA70`wF?#*K#wTw9*Sb#0>f|uT*w4iJaOzt@dNGn2m{XMpsre1cBE+wVfVu82RITCF#kY`Tptp*emQP4YyMWSn4-l*tM zjHEKj>IA-O0-IiG)FfNMP-uS>O_G|Cx{K1=NHM3ZvFIVd*qzvO2T#NFfRbpOG=tnU zx@TpT-Zep~6qejSzvPul1ry1LgfCJNNkA)n;ZWiRvkci@kfIk6qZ{WSh+BPC8}i_W*LKVtdlm z#0Tn1^z$`PI_aQad4BYP?YeNCzS2@x8Op#RdC7{Z3@_vEpo{JsJMx~=_pp|7%cD)t zDCzhNLA>6YA9#gAA>@B^4cr5e$ycvx;;RC4 z>vof6E5Q?Vz!p>o@^wno5%(gvR*Uo>qcdtXd((fQss3l3|IP;?zV<#`%tY6*D2pdi;=|R*wkq&^> z8s)Q=nro9-4z?-=k~X=Bk|k9Ili-T3qHCBARn;!NwLq=1MkuwbNbO3APm++`ny4jx zpLsgLN|CDXjpvYglbMi>&u(ym9WIg&P71QFzp>s}x6a1HHo$y5>ymZSaS4f( z)1&H*^3?|dq|CUje-*}U`^vq_{ zkG_xg;e2}W*S!fLy6OGR%~{LK>1dK)d)^^42%CSIt@^}EyanJGxH;+l*!$W|F5Nxm z7F{-Bn=whfA8YB}W&l`IH4}?-sF&_OC`ZH6MACcDEDP&ErB1~twaog?m(nr4FafH_ zaE@>@r(?S}<`+Phw_>kVo6MK)9yz9B_gVlHONd+2#JRO1xdPUzd(+x9(PNF7&;X}O zWmFbTjmo`{mQ4p094!0Z6=Ee1$U!;sQ%$6`x*IUotY)qQebN{3Zk@TI+|4LHQUQ1Z zDhYLbowB-E5Eu^cbipH>i&zLb04#{n@=39cJUnAw@ z_cL2%uzVToslv7?*y)8s8Du0TgB-#IAZw?rAj9|?vUi8)83tLUnjmPA$=oj+Y;otp zx(L=)XqUm|?M8>L+kgdRVla<6LrGDHjA5_owXt5EVku1)lU`2qBpBiIKtF#i3Ttji zYsXzE#@xaN7Z7+EA2FaBlQhsU;4SGJ9VD=N=|4YLPA`K<(Jk=GLgZ^m0841nK>n?! zj`YxcsMC;lzkP;n0ro1b&8#8HR|64wjJ6;J4^1qxfXrUX$ObKGX&0{~y#hOv6k`>9 z%t#MUJB{e3o;GG7wP!J_I6`_H@u6SFB8`W#&b8_WM!6U?<;2jGjVjC*VNi5U%*n$y zG$ikZ<4`9uJCI3BCs+$p0(^9s&2HWPv&MwDi&o+(yVa0IHzGzLVk7U_&`TIr_na}R z8W?4R=bZ(u4%J96M%OYSdmS({D;WzNy);E;uw~@miT?FOS)7tV<9+l=r?-p-J9k|T zkeFwthsf9h@oXG)$p*ZiD7u_#O(G8AAb3UQpeVBiSmj1Cw@Dg}SE2P7Ba>NM7*}hX zK(zAtoAS8RRCHzPBj%d`)Y4c+%^*qyz`@Y> zmz&<{22)}{63%sKkHn4R>ttFqHW;d1!HMaM4Hd_#fqtR80-cePm#ucxa8>@WtBSBO z^S+WwZZmArBs$yHZrC&bW7N**moWNF!CiY9bvswU;K`plJ-!oD*maRkI<1L4(9?o{R;vygbQ^_lUkNrP+Bq+rN6fr-GJ z*AR&sUFBlBvXK%}O~!4FEZc-2PnuYuGyx;Nx;L0Bv0`&j)w%CVv{CG1%}%o9lV(va-_kzc8?CUx%c-XI-RG^9NoY*G<4g(D6IOAPtpojPgNg+zf4?_|EAg;%XW zN6!R|Hzm0j3|Z=vFP34H021!NOYOw!V93a7YRoA(i>xR;N1Ugl)Bb}ti%N65>kCL< z1|+?k+B(*hAyHmBo|32%Mj%1hCAP0-2jO)CfM7IPdz>vas{v@k??5c{Y0Hz1&M1n=MC-i(GRcT!%UE9g_UJ3V z9U#sV7Ns2%+01}ki-{_7Ok~YRY%EUNVd7{L2&qWS>C?=>mLlP*iM;L;!0;`fi-IVs z4rL}$s)R4?ctf?d1)$8uoe-2`DGAvejLAgDgruq7v?Z3Ai( zxF$X;jWpL2s!67B)yy*RaM4qNU+9Rgq~Rl}NsWJp_h4$9>a<||=oa(ET0I@4hGbj+ zC9I9QtfH#baEW^|dyNCfd!=zW7I2 zvtbL5ZGq4b3Ie0xAxK#!WWxS)iJFeM=i3)NFW2mbr?FtvK9c4N<3&5s z7sf-qhwRNrBirLzy_Ah|cMXpkW>kC`6)(EWd2}~)gp@-)rRmrsx>KukQMw#R>zrLm zuRIrG7Xce>Hj4x%eteHMZ%yiiYX;H3(x&1pSQ4)b17z>G?W!^*526BKqaSg{bo;@O z{*z3lXE}Waxk*SYv!z~$Xn9II?G^l^({!&wkiGnA1W~p{7rt84ut8sH5H@^iMWS!L z9HvvWX&Y*I>*II$(eLP>XlM7Z{_5X=0?F~y8DJWSPwdXnbKo;mGb61RboFKiOxDJ9 z?(U;yfE&!L5>JXoF-g!?=iLb_AOM=S_zum}(p38PiFx%P zaw|PwOhbOcAU!%ET}rnsOw6WQho%_^;ouTj8lNX-?na79mM~KLKy_$-w`(F0*H(vA zS@qDWW9oz_Lg}h&AO-5!zDqMgk{8i5^OJv?xsv64Gm*Ie2_y=85Zdd?Ml15^{)9U* z(6&!xm->1S_C()o$TZRUn2AOTPXX{TmMOJX!^_R_Q$W>AzMKv1*acfVj#>ouWa;VNzi$QTco5& zMj+j!BLa&lFHE^5HwLdsZA}7ZB5skmO=jSoRNJk$@qTJ(RVeK&zy-W3$6Acmz*LTP zp+S0^6f?4=7^WM{c6*XY=S>s75xY03PPn8>rY=BWR+4}ut1=5DUu+{UGva3NgFP5{ z0NVm%k7k7|&xPD0=nR~DA&8kewFRxBBcC1+q{wuM226qx2m(}MES|y+7dr6LR-qZQ z5=Ni)M(|=|4Sb>++QhDUuuX5hw;Acpp&p_jF4m-)O>w~%;Zz}8)Nf}G#qvY#_}`H+ ziM0qBrMI}3joHrM=;7neZ3u>d6wUMa$9|{41VIngw;KR=Rz2eel$nKm#)k}OqUlFg zxeHMCiw@R}l**3EN8KS`oN9&6E&*g`7e|&O6kG2w!aNz2 zbm{FjSfboUO~}@IP&?67TXC^tbXybZ$vPOqK^BUa+jTJ{)clsC7GqS8FZqxHt4#BXN6?J05qJ5?ug8&RwLTKQ_E!(I0AeiREeCP%b0iS`@p-R2FxNVvqtRqh>e zko8rG!x0~GH*w^NyNI(Mg!^*h#BRSV$5kk8DpglqPsiY}@U&M;Wlk39=`~Z@J-_^W z<{^1Xrn;i(kdClH6H{JsVqq=i46-0U2OAbvb!H8xs^CkI!Zo&gOg|b!FcWgifhWy6 z>w&w&bC^4zWT%UL04el1+)6X%jCR#JS+}Bgyd`z~`H#A|2Stz^)-kUX*Ga&nA@2v) zQD6x6t2T}S^E=Xz{6CH=+7|K)N!|Yn-8WnZ?fW7>p;Rt=NIgF-a}HZ6n-f{oR+k^l z>}eP9isuJmAug66kF~KAmFlpf>yCqyvb$&4JjZ!O`R(8H?WCXVp{6jz4qXjJ2O*MF ztzk90jhUulD^cPK2ZUr*+9l|SHG)*m1hcvdTl(WAzY#-Z#82-x)Da%{B2Ew8=vro5 zFDvN{3RI1%rqGuBNI&xhoa)1Hj;EYZv=6WMYs+#*9Q+bL;crPe&r*93a+}V3e6Y*e zbhFwp%53^QJyo{{LoMWAdb(Pf&0g6GyN!7_Pf&DNjJ2^i(8l7D!=ld1q(%F^p7=?> ziTIs!DQaxW6JNx>gD>A!jC#e=1MK(;GBwwwIxVpC81#ziyAVc9V0_wduGe!cHpU4p zS_kQf1C{6D#-07cSwi>sR3*?Et)n|VuLr)6@Z-OD1$CS2p+YvY(^3s8K;R|6J+>tR z5hyHpMlv?Fv~hy8;Dl>|<* znyh?Ux2GJ8=h_aed>Y$RPQ7zams#5A2EE=MbE=(tjOwmCKPOW%+vpwcy zI`>$|D0Kr*>@ly-y2nWEipRIwV_pb$k6~!`7&9i~$c5lI?7eg>hmO+W2Gz2FMxhx( zA2CC#DIK86mxxVGMXqw9h&={{H6W5YJSR5~+@j(DG_R8MKBR}_HGWgG1M3bBYq~&8 zU5$Rc;6Z+$7wqXm`J3FxU++8ddt;1$F)WnIm1-@j_w@E*0y3X3XDU_j%*}FzN4WOU z&OoPXuKI|V>96V3BS6(GIAHW)1HH8;*^|A@Y? zkVgDHUGTQZ@AJ)741iC#OEKjufus((RSzbBa?ZJwN>!{AWG9T@$*XSemOj1s$8fr& zxUowd9Ixzs0c<7A#pus`KRcLSc`7qI%uR1r>WS%^4aQOmmMWSAl9Dj8MN%hA#>q8v zXY5%0Q$1XoLg%uyFDbeA>(L9P zi^(r3UCfu##i0r7792HL; zgNw?rNW^K$NHpTi2HN2os#vipREDL35trtJZ$VtJ*EBLbd1O(b9h9BqLx-DPL(THv zITG2APJ!5Q%cvOZ{7J|qc1rmFu}BqtU3?3M(rNMxtaUmoy`nea>F6qIR-$yqb_Dq8 z9}(p#m6b;L8AvnV)S@c>1+$#sETCRD<2X^6mD#&&HO6THKBORqFg#lwLy7tA23}5f zWuYVm}1L;#HKj_L5-iSA$f zp*wOJfgf;h)0vzjZ}H2Al{b%-U2Ozhv%uxzi-2^InE^J{OFE0gm8T$V2@`#~Ss31P z<}{{7)(!b9@XWT?Fi_|ugW;v0UiS0@sI<%ugm!IlQR)t%V1A5lHgt#>rU)UFN@-_~ z=*17F0md$@d*$)f9~+cTOvJAMM|UnDQ$@Y`rkq-S;5?S{Ppl#xx8ZtcnJ1gzg3ZcT#W#ob|obn{DYUXzGdZ=~`S^A)7T zhO&~nluyzcKhF*aLouNEiGep6-~Yn#U9~v5doXxgyTQYDB_FnrgD>N|nr50&{S4s! zd@I28;-8XyVmc4#D?>#u!(vk&k`H*uB$F)D9XKey24qvsh;s~ukODVZ=L6iC1x7W9 zI(>Zzw&yujA zrIwKD>0z?ySbg%!=m55#c4i9-(q8Q67l+Lu&1Jfy#M7S&FX}8UUH*SA{`+58eUl61~^kr2>Q@yGpp? zbzvS$e)rgw#8G3%xenO4`LlH*e!mZbjJ}(S=F&u6->5=pf~apXX~e2iIfg12!&49_ zr93Foq56SFwK&pHHvHDbymIBLu660+Jj z=v+kdS%YO$&+rp%*0W_JgLJb(kqniqAyJ&T_WU*m?ccFV`A;! zf%MYnfdnQ)uD$fLHhg-O_Ike*>R>BSn4b@cT%{E-St_DG{F3Wry6FgkCr+i5{_^KO z^f~<&K>8tFNK0H@JgrqLr2pYVpL->q9+e>6ns1h&SqTSUmXzCaiJi|-PB%^A;I+Ui z9Vfmu9mmL!C75CpNRt?hC+uH9dh|-RDS*UO=1I-jxI-&jixIN!d$&at}z6)xH)ich-X{v*F8;& zt#iB^q!+`T8#3X+U3m@q%{kR}WpGNH!fdLvm7PLh1;%$UUb(2u4ZW{yZm7T+2mjx3 zLod<^L4^Dqr9uV%Ao<)?|xQIy(YhNX|n3BxA*UZq*mdvgxscy%Mw<@kDryBuE|*fox?8`uiR*VFCz+U-|3zGrwz(jr9^^pfI4>}$Y~ zolipV|DL}y2_*AZ2lk;0?DX_tl0CJN>ZtivF^Ya;$RH&57y z8-&R8jfTk$>g!IAg>ut;S%1Qw%X7N}ib1E_a08nJ zNe)|c=M1)Wz?8=fx_VGn27e%fu6{ug2Sb?jtInVkD#@Ue2KaWS70X|`@Nd5G$ILjc zH?8=kd|I&{eJ7rXvuOnxhkprgQ0E(;R$yoOStrdc;ve_77-QW;Lk2e|jTziZm%-)1 zacp+m;6gf^`22(qh4;wyZgn~=ip%6;+)bx-F9+SR$QENKosNs@SeY?R5`~I3*vQh` zS;Cf?(vBM}J^2lD8j1(#ANwEwr21E|y#fJ=+6oNNh-*-goYW-%&C;{Opow5KwHaNz zR?0j>HFy)|uIv}K)jboE@)_oF`t3RAs!H0veq1ZzB=OiNojzfQ%hveq0Q=c35?tC5 zd-T|(W?XVq78Tl;;+PU|G0;!}83)-Rp0%`08k#xbZ~U(2gv2E{J|zh8k0i2aqTd>H zQCl^BTJpj4^8@x>k3YzFXTFt*m$?mi;WV3wJgI5AHD_SNHDktR;O zVXb8=j9NL08$?~!gwDs@*8zPo7L*1O^RBEi?%6P8M#gN4Vx}@5k%mTn0GR(} z&ItCJw&Cjdi_MJxxjCRs>_busOx@nkm=8g;u_dt`JaYhT0K%&J~z9=Nh%$&g6 zxH4FR{w}{6#Q)R>U)~Y$G7o_FRgRv*@J{dktdIfhlN+|pp>Xg0(qm|ur(Wg)c(6*psyoN6xsZx3U;I z17_E}i;(QCH(TP4|7X%6OMwN}1(y5d#UOM8LDQ0^V5m@=+a#lxvu_6H*|`xxXA78M@(50N#r=p+Z4&m6B4euE7_=hP0p2*<-&kTTLF>qMIkCIo2O*Y zvQySV{2nQ5p`)y%);h{M)KS*^owBkO1^oXs43vw949l8diFdbpCixI>Qxi&IQDs$% zwpPUuimXmipha`#^NNb+i^S%(-h zdlyFKltXM)x{}hc25wr9aYK=nBd|;w1XB#oSM26zNT_IT8F^?9ku;4H>FoD-U7|o+ zrd+O|2q|5MOBNlrzX-#gUA^6h3KsTcnXa{t=7Z~*X&yJ4_>?Nby;w#?PHo`|Nj z3Lw5|`kB-8X5~Wx1bHO*Hnr0fm8umG1@S~9mo!MtluEl<)X}b)e`cu^3XJ+xT1MR$!KtgF8&>ozqPsy(-4K-P za_V|eZj4jcgOW}AR?6OWIdwfKtKxE9PIW`cIfaQ?g;PHja=fa~>2z*`kmu~M(=Kh( z>2)st>(b1$?hYIz4X?Bp*|N0G>QIP@vV}Bz@zCs$=9MU}G?h51QNksVZ5l4}+w7!u z&CD_RpTG|_%l0FnRML;#&~G_?qdQ&Bj>9aotH1L^KOIU0k#1&uRQx4&U8t2BqiUc1 zl7%7Gx9x*S%Fhm8@tBSYDYjlc`;=+~X%FUW*!;U8 zf2UU`v7sa7K&-R^u@ZW*y*Qmb96+Fk`Psn0$ddE*brh@>8x-zizka( zI1L)yML*BkZ+T8rIVzllzG8n%~VPW8D!B3}F4_8ow*IhQqzpeaYeBa}=tC z=^Yq8$ZyVy;52i|ihmMZr&W_@#` zl3Io6$`|M`NAhg^IoAIyN?=AQ#4Hq^b`vor=GX%DX7sJhMte;cc;{L#@K6=rOs0BW zxb09~dz(Sq8|$6mU0TkXCVFNQiY^Sa<^*JBAf zJAJJ(OTcU8;mN-bJNwJ>c`eW_r`8Pb@@`TfNBALuD-0)R?(%HLKfIMI>?!tffGgjw z_Hc#HGbK>Hb-H?*pty4UHQq*Uh(Wp9U{{;CVs;EAo5k07oMX;Y)#Ekpte$4NtjtrU z$*!#ruyc)VY{OfhvXv*&Zdbe~PgAfdE4Xy`liXF@-Q`=JJgtY7GphadK0Vr`>;G1^ zMq9c5W~frO!=1*4v6`T6Vr`K7@7RrYWraqxHFhOJuC*(XFV6WX{waRB_;$xtMw|CO8!S8y_1$w_Y8oTOr#lNyENBtRV} zuOZ^P>k*NB%=#`muD8gxO~>CX6-(yOd`HWCp-%c>;U-K%E2NM1nn#gvvpa}Uq4MaO zSXn?-uzFcA&lU*HlwtS^2s-)(i(#2St8Nf9875(93lTc?pId;M3}iqx)6;fLlHW2; z$b!8h%=FyOO>s@a_G-7=7+TZDP+sw}jiD9W7+M1^Aqp?UXk)1M)`B4hhXbpqF+Y)O1GiQ)oo zsh$iL>VV+*N*}O@q7Y+@YL{#c^Jjw9A0CZPJc#pbK|u1AfrVi3nj4G7E3EX-d7d8>%3-PK zdEO8o{Ts5so_E_T=e&jK)`_F7(RtdoW@l$+lkw@~(D;eg*#3i$&9~-~(V6MF`Pqfh z`I%X7bYyyZWxQ19RQ%52xT;6-ms zAbpijjZY7sh)IJ z=eC{OckbA^bLXy|gFAQc+_Q7{a!%trP*GJ5W-*gqJ0{y=Uu+recw9dzJJht553!cpSj?^C%$gqOQ&C* zdi=Y%cGSL4fBt9eyY*YYg;zWGDKA?82WtyItt#Cz#6>Z<>A22J#~ha1h!{D^6|<_$O3<3jY3wJ&|e;pv&9#||dNQXd+z zrLwWS_12p!4LmW|8W0-kF zj+-On^Vk~NBy$U+hcPuW9J9&T_$)G9+;kIbPGpi|K=W>n{ORSMlqnBT9h1}nH`xOpL#4=m>xNfnU%4l;qj5FaT>K+ zliurQXXfVa9BZk&WNLhRlJ+BGcg{@H$VTWud#}$&Y19BRG<)65^fW^kiA2+RSOA?` zvt6W{A3p+mGYj)8D<4{zgOc~p%*`j`bII7uqtor1g=uW`=wZV&9UB9%*=ZVh!?QD! zt?A_GI23!}d)}BaH|Iw-2IxBCnt8)`lS$ZVW1B@X7(<7Dt~?Wg4ig`kLn1o254TRt zJ3<)I?>W&L74MFW%xB%_)P$=GN02Ko%`TuO!!wT0Oh4ki<*_3NXQswSjmXK=%*;`f zkLi&knOLaO!^p>xk?F^hnWGF;^tZuhJYb~8lCjp@=0Y#kmMyZW)@YV`2< z)L4>>q$=g)G4X6mWT$UQ!JL|keBC{?(sAnuB0xMKMPTIOp;MX% zP}KSHL*sy*ML~{J`}L030y2`|{97YOG!Rp?4yCeMl1)iwrev=AoJ85QY|eWKLL`Sr z=8}UgxG~paO!TpDc4mHNbY?2!zbKkv=oG%g9mN+1c|0e|WP&yaO>nGh5nWcs6284bh!UR)-40s#Ewn7bfB#P?JO0*ThjcnLE5NZ)U3F6-K5Iud&C( ze!6zt~s!V$Q< zFg@n|fU!L*$~{IN^g45d6~+nc9JJ^&e&Bh_A)f*t!sq1@pE92cA7Z#=f~{rZw`JnD zWn#JIUOs(%Vm@p5tmU(g4-vrf20k14+{B0IYk4!DEqwa<+|1`Cd|t}u7CvC`Vc+vE z(EkPczd-*N=>G!!U!eaB^nZc=FVO!5`oBQ`7wG@9^nZc=FA!0FoP8OzuhYIx`}*&B zIuj+@9P(0*@`(1lET3tNwQ@`(OL8EIT=bhI@_0d@%T#YNImPA1U(i~_KZ5{9!qmg8;?XNV-gRNvFaj}Bj z6xGlD9`W8oo;UH(Ll1cqaGOi};?D$uJdZDio4uO1c{5_d96*2Ew87>JcDLDEQ{#D9 zD|>!_HA1GUC4?dJkdjsZAszX@nr0rFegs}s#Z`~LUC;A+*|+8=`9I{@^Xw1D^XMOc zyPsQG`wyDX{)c3G1^w}=u9&~w&)XI40^Mo Date: Wed, 28 Oct 2020 12:48:22 -0400 Subject: [PATCH 4/9] fix unit test --- tests/get_table_seckey_tests.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/get_table_seckey_tests.cpp b/tests/get_table_seckey_tests.cpp index 09b71a7b17..cd87b2c020 100644 --- a/tests/get_table_seckey_tests.cpp +++ b/tests/get_table_seckey_tests.cpp @@ -75,9 +75,9 @@ BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { BOOST_REQUIRE(res_nm.rows.size() == 2); params.lower_bound = "a"; - params.upper_bound = "b"; + params.upper_bound = "c"; res_nm = plugin.get_table_rows(params); - BOOST_REQUIRE(res_nm.rows.size() == 2); + BOOST_REQUIRE(res_nm.rows.size() == 3); push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 8)("nm", "1111")); push_action("test"_n, "addnumobj"_n, "test"_n, mutable_variant_object()("input", 9)("nm", "2222")); From d1e63ec9a9efae77169193e8386c83864f373688 Mon Sep 17 00:00:00 2001 From: Jonghoo Kim Date: Fri, 30 Oct 2020 13:37:24 -0400 Subject: [PATCH 5/9] handled comment --- plugins/chain_plugin/chain_plugin.cpp | 4 +++ .../eosio/chain_plugin/chain_plugin.hpp | 34 ++++++++++++++----- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/plugins/chain_plugin/chain_plugin.cpp b/plugins/chain_plugin/chain_plugin.cpp index 2758cd90e1..cfdc63fcc3 100644 --- a/plugins/chain_plugin/chain_plugin.cpp +++ b/plugins/chain_plugin/chain_plugin.cpp @@ -1583,6 +1583,10 @@ uint64_t read_only::get_table_index_name(const read_only::get_table_rows_params& return index; } +uint64_t convert_to_type(const eosio::name &n, const string &desc) { + return n.to_uint64_t(); +} + template<> uint64_t convert_to_type(const string& str, const string& desc) { diff --git a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp index 68eff0985d..dd1fac02b8 100644 --- a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp @@ -69,6 +69,8 @@ Type convert_to_type(const string& str, const string& desc) { } FC_RETHROW_EXCEPTIONS(warn, "Could not convert ${desc} string '${str}' to key type.", ("desc", desc)("str",str) ) } +uint64_t convert_to_type(const eosio::name &n, const string &desc); + template<> uint64_t convert_to_type(const string& str, const string& desc); @@ -519,9 +521,15 @@ class read_only { if( p.lower_bound.size() ) { if( p.key_type == "name" ) { name s(p.lower_bound); - SecKeyType lv = convert_to_type( std::to_string(s.to_uint64_t()), "lower_bound name" ); // avoids compiler error - std::get<1>(lower_bound_lookup_tuple) = conv( lv ); - } else { + if constexpr (std::is_same_v) { + SecKeyType lv = convert_to_type(s, "lower_bound name"); + std::get<1>(lower_bound_lookup_tuple) = conv(lv); + } else { + EOS_ASSERT(false, chain::contract_table_query_exception, "Invalid key type of eosio::name ${nm} for lower bound", ("nm", p.lower_bound)); + } + } + else + { SecKeyType lv = convert_to_type( p.lower_bound, "lower_bound" ); std::get<1>(lower_bound_lookup_tuple) = conv( lv ); } @@ -530,9 +538,15 @@ class read_only { if( p.upper_bound.size() ) { if( p.key_type == "name" ) { name s(p.upper_bound); - SecKeyType uv = convert_to_type(std::to_string(s.to_uint64_t()), "upper_bound name"); - std::get<1>(upper_bound_lookup_tuple) = conv( uv ); - } else { + if constexpr (std::is_same_v) { + SecKeyType uv = convert_to_type(s, "upper_bound name"); + std::get<1>(upper_bound_lookup_tuple) = conv(uv); + } else { + EOS_ASSERT(false, chain::contract_table_query_exception, "Invalid key type of eosio::name ${nm} for upper bound", ("nm", p.upper_bound)); + } + } + else + { SecKeyType uv = convert_to_type( p.upper_bound, "upper_bound" ); std::get<1>(upper_bound_lookup_tuple) = conv( uv ); } @@ -601,7 +615,9 @@ class read_only { if( p.key_type == "name" ) { name s(p.lower_bound); std::get<1>(lower_bound_lookup_tuple) = s.to_uint64_t(); - } else { + } + else + { auto lv = convert_to_type( p.lower_bound, "lower_bound" ); std::get<1>(lower_bound_lookup_tuple) = lv; } @@ -611,7 +627,9 @@ class read_only { if( p.key_type == "name" ) { name s(p.upper_bound); std::get<1>(upper_bound_lookup_tuple) = s.to_uint64_t(); - } else { + } + else + { auto uv = convert_to_type( p.upper_bound, "upper_bound" ); std::get<1>(upper_bound_lookup_tuple) = uv; } From 59fe31c7cd834624679197f0967a413226e32924 Mon Sep 17 00:00:00 2001 From: Jonghoo Kim Date: Fri, 30 Oct 2020 13:41:27 -0400 Subject: [PATCH 6/9] format a else block --- .../include/eosio/chain_plugin/chain_plugin.hpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp index dd1fac02b8..2bf22334cc 100644 --- a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp @@ -527,9 +527,7 @@ class read_only { } else { EOS_ASSERT(false, chain::contract_table_query_exception, "Invalid key type of eosio::name ${nm} for lower bound", ("nm", p.lower_bound)); } - } - else - { + } else { SecKeyType lv = convert_to_type( p.lower_bound, "lower_bound" ); std::get<1>(lower_bound_lookup_tuple) = conv( lv ); } @@ -544,9 +542,7 @@ class read_only { } else { EOS_ASSERT(false, chain::contract_table_query_exception, "Invalid key type of eosio::name ${nm} for upper bound", ("nm", p.upper_bound)); } - } - else - { + } else { SecKeyType uv = convert_to_type( p.upper_bound, "upper_bound" ); std::get<1>(upper_bound_lookup_tuple) = conv( uv ); } From 646f4b4fa492d6744c1bb96cd61cafe35f70d384 Mon Sep 17 00:00:00 2001 From: Jonghoo Kim Date: Fri, 30 Oct 2020 13:44:41 -0400 Subject: [PATCH 7/9] format --- .../include/eosio/chain_plugin/chain_plugin.hpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp index 2bf22334cc..8b9a037de2 100644 --- a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp @@ -611,9 +611,7 @@ class read_only { if( p.key_type == "name" ) { name s(p.lower_bound); std::get<1>(lower_bound_lookup_tuple) = s.to_uint64_t(); - } - else - { + } else { auto lv = convert_to_type( p.lower_bound, "lower_bound" ); std::get<1>(lower_bound_lookup_tuple) = lv; } @@ -623,9 +621,7 @@ class read_only { if( p.key_type == "name" ) { name s(p.upper_bound); std::get<1>(upper_bound_lookup_tuple) = s.to_uint64_t(); - } - else - { + } else { auto uv = convert_to_type( p.upper_bound, "upper_bound" ); std::get<1>(upper_bound_lookup_tuple) = uv; } From 51f5c72bc052b5cea650548c346a41b9d131897d Mon Sep 17 00:00:00 2001 From: Jonghoo Kim Date: Fri, 30 Oct 2020 14:18:30 -0400 Subject: [PATCH 8/9] removed lvalue --- .../include/eosio/chain_plugin/chain_plugin.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp index 8b9a037de2..ba5719ccc5 100644 --- a/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eosio/chain_plugin/chain_plugin.hpp @@ -520,9 +520,8 @@ class read_only { if( p.lower_bound.size() ) { if( p.key_type == "name" ) { - name s(p.lower_bound); if constexpr (std::is_same_v) { - SecKeyType lv = convert_to_type(s, "lower_bound name"); + SecKeyType lv = convert_to_type(name{p.lower_bound}, "lower_bound name"); std::get<1>(lower_bound_lookup_tuple) = conv(lv); } else { EOS_ASSERT(false, chain::contract_table_query_exception, "Invalid key type of eosio::name ${nm} for lower bound", ("nm", p.lower_bound)); @@ -535,9 +534,8 @@ class read_only { if( p.upper_bound.size() ) { if( p.key_type == "name" ) { - name s(p.upper_bound); if constexpr (std::is_same_v) { - SecKeyType uv = convert_to_type(s, "upper_bound name"); + SecKeyType uv = convert_to_type(name{p.upper_bound}, "upper_bound name"); std::get<1>(upper_bound_lookup_tuple) = conv(uv); } else { EOS_ASSERT(false, chain::contract_table_query_exception, "Invalid key type of eosio::name ${nm} for upper bound", ("nm", p.upper_bound)); From fe68ea525b651ec3f5aef7dcc5b58c6a041bf696 Mon Sep 17 00:00:00 2001 From: Lin Huang Date: Thu, 23 Jun 2022 20:23:42 -0400 Subject: [PATCH 9/9] Adapt to new signature of chain_apis::read_only for trx_finality_status_processing --- tests/get_table_seckey_tests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/get_table_seckey_tests.cpp b/tests/get_table_seckey_tests.cpp index cd87b2c020..fa97dbc266 100644 --- a/tests/get_table_seckey_tests.cpp +++ b/tests/get_table_seckey_tests.cpp @@ -42,7 +42,7 @@ BOOST_FIXTURE_TEST_CASE( get_table_next_key_test, TESTER ) try { set_abi( "test"_n, contracts::get_table_seckey_test_abi().data() ); produce_block(); - chain_apis::read_only plugin(*(this->control), {}, fc::microseconds::maximum()); + chain_apis::read_only plugin(*(this->control), {}, fc::microseconds::maximum(), {}, {}); chain_apis::read_only::get_table_rows_params params = []{ chain_apis::read_only::get_table_rows_params params{}; params.json=true;