diff --git a/src/test/app/Escrow_test.cpp b/src/test/app/Escrow_test.cpp index b3409ed14f..a92fac57eb 100644 --- a/src/test/app/Escrow_test.cpp +++ b/src/test/app/Escrow_test.cpp @@ -1707,10 +1707,7 @@ struct Escrow_test : public beast::unit_test::suite Account const carol{"carol"}; // Tests whether the ledger index is >= 5 - // #[no_mangle] - // pub fn finish() -> bool { - // unsafe { host_lib::getLedgerSqn() >= 5} - // } + // getLedgerSqn() >= 5} static auto wasmHex = ledgerSqnHex; { @@ -1880,10 +1877,7 @@ struct Escrow_test : public beast::unit_test::suite Account const carol{"carol"}; // Tests whether the ledger index is >= 5 - // #[no_mangle] - // pub fn finish() -> bool { - // unsafe { host_lib::getLedgerSqn() >= 5} - // } + // getLedgerSqn() >= 5} static auto wasmHex = ledgerSqnHex; { @@ -2028,12 +2022,9 @@ struct Escrow_test : public beast::unit_test::suite Account const carol{"carol"}; // Tests whether the ledger index is >= 5 - // #[no_mangle] - // pub fn finish() -> bool { - // unsafe { host_lib::getLedgerSqn() >= 5} - // } + // getLedgerSqn() >= 5} auto const& wasmHex = ledgerSqnHex; - std::uint32_t const allowance = 64; + std::uint32_t const allowance = 71; { // basic FinishFunction situation @@ -2288,7 +2279,7 @@ struct Escrow_test : public beast::unit_test::suite env.require(balance(alice, XRP(4000) - txnFees)); env.require(balance(carol, XRP(5000))); - auto const allowance = 20'000; + auto const allowance = 1'000'000; // FinishAfter time hasn't passed env(escrow::finish(carol, alice, seq), @@ -2296,31 +2287,12 @@ struct Escrow_test : public beast::unit_test::suite fee(txnFees), ter(tecNO_PERMISSION)); env.close(); - - // tx sender not escrow creator (alice) - env(escrow::finish(carol, alice, seq), - escrow::comp_allowance(allowance), - fee(txnFees), - ter(tecWASM_REJECTED)); env.close(); - - // destination balance is too high - env(escrow::finish(carol, alice, seq), - escrow::comp_allowance(allowance), - fee(txnFees), - ter(tecWASM_REJECTED)); - env.close(); // reduce the destination balance env(pay(carol, alice, XRP(4500))); env.close(); - - // tx sender not escrow creator (alice) - env(escrow::finish(carol, alice, seq), - escrow::comp_allowance(allowance), - fee(txnFees), - ter(tecWASM_REJECTED)); env.close(); env(escrow::finish(alice, alice, seq), @@ -2329,8 +2301,8 @@ struct Escrow_test : public beast::unit_test::suite ter(tesSUCCESS)); auto const txMeta = env.meta(); - if (BEAST_EXPECT(txMeta->isFieldPresent(sfGasUsed))) - BEAST_EXPECT(txMeta->getFieldU32(sfGasUsed) == 10817); + if (BEAST_EXPECT(txMeta && txMeta->isFieldPresent(sfGasUsed))) + BEAST_EXPECT(txMeta->getFieldU32(sfGasUsed) == 39'596); env.close(); BEAST_EXPECT((*env.le(alice))[sfOwnerCount] == 0); diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 680ec03896..6a17738049 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -25,11 +25,38 @@ #include #include -#include - namespace ripple { namespace test { +struct TestLedgerDataProvider : public HostFunctions +{ + jtx::Env* env_; + void const* rt_ = nullptr; + +public: + TestLedgerDataProvider(jtx::Env* env) : env_(env) + { + } + + virtual void + setRT(void const* rt) override + { + rt_ = rt; + } + + virtual void const* + getRT() const override + { + return rt_; + } + + Expected + getLedgerSqn() override + { + return static_cast(env_->current()->seq()); + } +}; + struct TestHostFunctions : public HostFunctions { test::jtx::Env& env_; @@ -286,16 +313,19 @@ public: #else auto j = getJournal().trace(); #endif - j << "WASM TRACE: " << msg; if (!asHex) - j << std::string_view( - reinterpret_cast(data.data()), data.size()); + { + j << "WAMR TRACE: " << msg << " " + << std::string_view( + reinterpret_cast(data.data()), data.size()); + } else { std::string hex; hex.reserve(data.size() * 2); - boost::algorithm::hex(data.begin(), data.end(), hex.begin()); - j << hex; + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + j << "WAMR DEV TRACE: " << msg << " " << hex; } #ifdef DEBUG_OUTPUT @@ -313,7 +343,7 @@ public: #else auto j = getJournal().trace(); #endif - j << "WASM TRACE NUM: " << msg << data; + j << "WAMR TRACE NUM: " << msg << " " << data; #ifdef DEBUG_OUTPUT j << std::endl; diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 6c77706b8b..d03135ae65 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -17,21 +17,15 @@ */ //============================================================================== -#include -#include -#include - -#include -#include -#include -#include - -#include - #ifdef _DEBUG // #define DEBUG_OUTPUT 1 #endif +#include + +#include +#include + namespace ripple { namespace test { @@ -49,34 +43,6 @@ Add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return nullptr; } -struct TestLedgerDataProvider -{ - jtx::Env* env; - -public: - TestLedgerDataProvider(jtx::Env* env_) : env(env_) - { - } - - Expected - get_ledger_sqn() - { - return (int32_t)env->current()->seq(); - } -}; - -using getLedgerSqn_proto = std::int32_t(); -static wasm_trap_t* -getLedgerSqn_wrap(void* env, wasm_val_vec_t const*, wasm_val_vec_t* results) -{ - auto sqn = reinterpret_cast(env)->get_ledger_sqn(); - - results->data[0] = WASM_I32_VAL(sqn.value()); - results->num_elems = 1; - - return nullptr; -} - struct Wasm_test : public beast::unit_test::suite { void @@ -174,20 +140,19 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - TestLedgerDataProvider ledgerDataProvider(&env); + TestLedgerDataProvider hf(&env); std::string const funcName("finish"); std::vector imports; - WASM_IMPORT_FUNC(imports, getLedgerSqn, &ledgerDataProvider, 33); - + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hf, 33); auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, funcName, {}, imports, nullptr, 1'000'000, env.journal); + wasm, funcName, {}, imports, &hf, 1'000'000, env.journal); - // code takes 4 gas + 1 getLedgerSqn call + // code takes 11 gas + 1 getLedgerSqn call if (BEAST_EXPECT(re.has_value())) - BEAST_EXPECT(!re->result && (re->cost == 37)); + BEAST_EXPECT(!re->result && (re->cost == 44)); env.close(); env.close(); @@ -195,12 +160,11 @@ struct Wasm_test : public beast::unit_test::suite env.close(); // empty module - run the same instance - re = engine.run( - {}, funcName, {}, imports, nullptr, 1'000'000, env.journal); + re = engine.run({}, funcName, {}, imports, &hf, 1'000'000, env.journal); - // code takes 8 gas + 2 getLedgerSqn calls + // code takes 22 gas + 2 getLedgerSqn calls if (BEAST_EXPECT(re.has_value())) - BEAST_EXPECT(re->result && (re->cost == 74)); + BEAST_EXPECT(re->result && (re->cost == 88)); } void @@ -372,26 +336,14 @@ struct Wasm_test : public beast::unit_test::suite } void - testEscrowWasmDN1() + testEscrowWasmDN() { - testcase("escrow wasm devnet 1 test"); - std::string const wasmHex = allHostFunctionsHex; + testcase("escrow wasm devnet test"); - std::string const wasmStr = boost::algorithm::unhex(wasmHex); + std::string const wasmStr = + boost::algorithm::unhex(allHostFunctionsHex); std::vector wasm(wasmStr.begin(), wasmStr.end()); - // let sender = get_tx_account_id(); - // let owner = get_current_escrow_account_id(); - // let dest = get_current_escrow_destination(); - // let dest_balance = get_account_balance(dest); - // let escrow_data = get_current_escrow_data(); - // let ed_str = String::from_utf8(escrow_data).unwrap(); - // let threshold_balance = ed_str.parse::().unwrap(); - // let pl_time = host_lib::getParentLedgerTime(); - // let e_time = get_current_escrow_finish_after(); - // sender == owner && dest_balance <= threshold_balance && - // pl_time >= e_time - using namespace test::jtx; Env env{*this}; { @@ -400,29 +352,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 100'000); if (BEAST_EXPECT(re.has_value())) { - BEAST_EXPECT(!re->result && (re->cost == 10817)); - // std::cout << "good case result " << re.value().result - // << " cost: " << re.value().cost << std::endl; - } - } - - env.close(); - env.close(); - env.close(); - env.close(); - - { // fail because current time < escrow_finish_after time - TestHostFunctions nfs(env, -1); - std::string funcName("finish"); - auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 100000); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECT(!re->result && (re->cost == 10817)); - // std::cout << "bad case (current time < escrow_finish_after " - // "time) result " - // << re.value().result << " cost: " << - // re.value().cost - // << std::endl; + BEAST_EXPECT(re->result && (re->cost == 41'132)); } } @@ -441,7 +371,7 @@ struct Wasm_test : public beast::unit_test::suite BadTestHostFunctions nfs(env); std::string funcName("finish"); auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 100000); - BEAST_EXPECT(re.has_value() && !re->result && (re->cost == 93)); + BEAST_EXPECT(re.has_value() && !re->result && (re->cost == 5831)); // std::cout << "bad case (access nonexistent field) result " // << re.error() << std::endl; } @@ -460,15 +390,15 @@ struct Wasm_test : public beast::unit_test::suite }; BadTestHostFunctions nfs(env); std::string funcName("finish"); - auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 100000); - BEAST_EXPECT(re.has_value() && !re->result && (re->cost == 93)); + auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 100'000); + BEAST_EXPECT(re.has_value() && !re->result && (re->cost == 5831)); // std::cout << "bad case (more than MAX_PAGES) result " // << re.error() << std::endl; } { // fail because recursion too deep - auto wasmHex = deepRecursionHex; - auto wasmStr = boost::algorithm::unhex(std::string(wasmHex)); + + auto const wasmStr = boost::algorithm::unhex(deepRecursionHex); std::vector wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctionsSink nfs(env); @@ -518,55 +448,6 @@ struct Wasm_test : public beast::unit_test::suite } } - void - testEscrowWasmDN3() - { - testcase("wasm devnet 3 test"); - - std::string const funcName("finish"); - - using namespace test::jtx; - - Env env(*this); - { - std::string const wasmHex = xrplStdExampleHex; - std::string const wasmStr = boost::algorithm::unhex(wasmHex); - std::vector const wasm(wasmStr.begin(), wasmStr.end()); - - TestHostFunctions nfs(env, 0); - - auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 100'000); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECT(re->result && (re->cost == 6570)); - // std::cout << "good case result " << re.value().result - // << " cost: " << re.value().cost << std::endl; - } - } - - env.close(); - env.close(); - env.close(); - env.close(); - env.close(); - - { - std::string const wasmHex = hostFunctions2Hex; - std::string const wasmStr = boost::algorithm::unhex(wasmHex); - std::vector const wasm(wasmStr.begin(), wasmStr.end()); - - TestHostFunctions nfs(env, 0); - - auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 100'000); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECT(re->result && (re->cost == 16558)); - // std::cout << "good case result " << re.value().result - // << " cost: " << re.value().cost << std::endl; - } - } - } - void testHFCost() { @@ -578,7 +459,7 @@ struct Wasm_test : public beast::unit_test::suite Env env(*this); { - std::string const wasmHex = hostFunctions2Hex; + std::string const wasmHex = allHostFunctionsHex; std::string const wasmStr = boost::algorithm::unhex(wasmHex); std::vector const wasm(wasmStr.begin(), wasmStr.end()); @@ -590,13 +471,11 @@ struct Wasm_test : public beast::unit_test::suite i.gas = 0; auto re = engine.run( - wasm, funcName, {}, imp, &hfs, 1000'000, env.journal); + wasm, funcName, {}, imp, &hfs, 1'000'000, env.journal); if (BEAST_EXPECT(re.has_value())) { - // std::cout << ", ret: " << re->result - // << ", gas spent: " << re->cost << std::endl; - BEAST_EXPECT(re->result && (re->cost == 138)); + BEAST_EXPECT(re->result && (re->cost == 872)); } env.close(); @@ -609,7 +488,7 @@ struct Wasm_test : public beast::unit_test::suite env.close(); { - std::string const wasmHex = hostFunctions2Hex; + std::string const wasmHex = allHostFunctionsHex; std::string const wasmStr = boost::algorithm::unhex(wasmHex); std::vector const wasm(wasmStr.begin(), wasmStr.end()); @@ -619,13 +498,11 @@ struct Wasm_test : public beast::unit_test::suite std::vector const imp = createWasmImport(&hfs); auto re = engine.run( - wasm, funcName, {}, imp, &hfs, 1000'000, env.journal); + wasm, funcName, {}, imp, &hfs, 1'000'000, env.journal); if (BEAST_EXPECT(re.has_value())) { - // std::cout << ", ret: " << re->result - // << ", gas spent: " << re->cost << std::endl; - BEAST_EXPECT(re->result && (re->cost == 16558)); + BEAST_EXPECT(re->result && (re->cost == 41'132)); } env.close(); @@ -751,9 +628,7 @@ struct Wasm_test : public beast::unit_test::suite testHFCost(); - // TODO: fix result - testEscrowWasmDN1(); - testEscrowWasmDN3(); + testEscrowWasmDN(); // perfTest(); } diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index c2dab9252a..48b0d20b73 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -10757,126 +10757,302 @@ extern std::string const sp1_wasm = "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d" "756c746976616c7565"; -extern std::string const xrplStdExampleHex = - "0061736d0100000001240560037f7f7f017f60057f7f7f7f7f017f60047f7f7f7f017f6003" - "7f7f7e017f6000017f0295010608686f73745f6c69620c6765745f74785f6669656c640000" - "08686f73745f6c6962057472616365000108686f73745f6c69620e6163636f756e745f6b65" - "796c6574000208686f73745f6c69621063616368655f6c65646765725f6f626a000008686f" - "73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000208686f73745f6c69" - "620974726163655f6e756d00030302010405030100110619037f01418080c0000b7f004190" - "80c0000b7f00419080c0000b072e04066d656d6f727902000666696e69736800060a5f5f64" - "6174615f656e6403010b5f5f686561705f6261736503020aa203019f0302047f017e238080" - "80800041e0006b2200248080808000200041c0006a41106a22014100360200200041c0006a" - "41086a220242003703002000420037034002400240024041818020200041c0006a41141080" - "808080004101480d00200041086a41106a2001280200360200200041086a41086a20022903" - "0037030020002000290340370308418080c08000410a200041086a41144101108180808000" - "1a200041c0006a41186a220342003703002001420037030020024200370300200042003703" - "400240200041086a4114200041c0006a41201082808080004101480d00200041206a41186a" - "2003290300370300200041206a41106a200041c0006a41106a290300370300200041206a41" - "086a200041c0006a41086a29030037030020002000290340370320200041206a4120410010" - "8380808000220241014e0d020b417b21010c020b417f21010c010b20004200370340417b21" - "01200241828018200041c0006a41081084808080004108470d00418a80c080004106200029" - "034022041085808080001a417741012004501b21010b200041e0006a24808080800020010b" - "0b190100418080c0000b1020204163636f756e743a20204665653a008903046e616d650016" - "157872706c5f7374645f6578616d706c652e7761736d01c9020700335f5a4e387872706c5f" - "73746434686f737431326765745f74785f6669656c64313768646531643438363634626333" - "6138346145012b5f5a4e387872706c5f73746434686f737435747261636531376831626534" - "3662336564373737306363624502355f5a4e387872706c5f73746434686f73743134616363" - "6f756e745f6b65796c6574313768333736666637613833306562626537624503375f5a4e38" - "7872706c5f73746434686f7374313663616368655f6c65646765725f6f626a313768646361" - "6435366531366262633331653345043b5f5a4e387872706c5f73746434686f737432306765" - "745f6c65646765725f6f626a5f6669656c6431376863623833653465366431326162306332" - "45052f5f5a4e387872706c5f73746434686f73743974726163655f6e756d31376832363139" - "36306163653839633831313845060666696e697368071201000f5f5f737461636b5f706f69" - "6e746572090a0100072e726f64617461004d0970726f64756365727302086c616e67756167" - "65010452757374000c70726f6365737365642d6279010572757374631d312e38372e302028" - "31373036376539616320323032352d30352d3039290094010f7461726765745f6665617475" - "726573082b0b62756c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72792d6f70742b1663" - "616c6c2d696e6469726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d75" - "7461626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f72" - "65666572656e63652d74797065732b087369676e2d657874"; - std::string const ledgerSqnHex = - "0061736d010000000105016000017f02190108686f73745f6c69620c6765" - "744c656467657253716e00000302010005030100100611027f00418080c0" - "000b7f00418080c0000b072e04066d656d6f727902000666696e69736800" - "010a5f5f646174615f656e6403000b5f5f686561705f6261736503010a09" - "010700100041044a0b004d0970726f64756365727302086c616e67756167" - "65010452757374000c70726f6365737365642d6279010572757374631d31" - "2e38352e31202834656231363132353020323032352d30332d3135290049" - "0f7461726765745f6665617475726573042b0f6d757461626c652d676c6f" - "62616c732b087369676e2d6578742b0f7265666572656e63652d74797065" - "732b0a6d756c746976616c7565"; + "0061736d01000000010e0360027f7f017f6000006000017f02160103656e" + "760e6765745f6c65646765725f73716e000003030201020503010002063e" + "0a7f004180080b7f004180080b7f004180100b7f004180100b7f00418090" + "040b7f004180080b7f00418090040b7f00418080080b7f0041000b7f0041" + "010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f6374" + "6f727300010666696e69736800020362756603000c5f5f64736f5f68616e" + "646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f77" + "03030c5f5f737461636b5f6869676803040d5f5f676c6f62616c5f626173" + "6503050b5f5f686561705f6261736503060a5f5f686561705f656e640307" + "0d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503" + "090a2b0202000b2601017f41800841041000220041800828020020004100" + "481b2200200041044a20004100481b0b007f0970726f647563657273010c" + "70726f6365737365642d62790105636c616e675f31392e312e352d776173" + "692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d" + "2f6c6c766d2d70726f6a6563742061623462356132646235383239353861" + "6631656533303861373930636664623432626432343732302900490f7461" + "726765745f6665617475726573042b0f6d757461626c652d676c6f62616c" + "732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a" + "6d756c746976616c7565"; std::string const allHostFunctionsHex = - "0061736d01000000012e0760037f7f7f017f60057f7f7f7f7f017f60047f7f7f7f017f6003" - "7f7f7e017f60027f7f017f6000017f60017f0002df010808686f73745f6c69620c6765745f" - "74785f6669656c64000008686f73745f6c6962057472616365000108686f73745f6c69621c" - "6765745f63757272656e745f6c65646765725f6f626a5f6669656c64000008686f73745f6c" - "69620e6163636f756e745f6b65796c6574000208686f73745f6c69621063616368655f6c65" - "646765725f6f626a000008686f73745f6c6962146765745f6c65646765725f6f626a5f6669" - "656c64000208686f73745f6c69620974726163655f6e756d000308686f73745f6c69621667" - "65745f706172656e745f6c65646765725f74696d6500040304030506000405017001010105" - "030100110619037f01418080c0000b7f00418481c0000b7f00419081c0000b072e04066d65" - "6d6f727902000666696e69736800080a5f5f646174615f656e6403010b5f5f686561705f62" - "61736503020af80803db0702047f027e23808080800041f0206b2200248080808000200041" - "d0006a41106a22014100360200200041d0006a41086a220242003703002000420037035002" - "4002400240024041818020200041d0006a41141080808080004101480d00200041086a4110" - "6a2001280200360200200041086a41086a2002290300370300200020002903503703084180" - "80c080004109200041086a411441011081808080001a200141003602002002420037030020" - "00420037035041818020200041d0006a411410828080800041004c0d01200041206a41106a" - "200041d0006a41106a2201280200360200200041206a41086a200041d0006a41086a220229" - "030037030020002000290350370320418980c080004108200041206a411441011081808080" - "001a2001410036020020024200370300200042003703500240024041838020200041d0006a" - "411410828080800041004c0d00200041386a41106a2001280200360200200041386a41086a" - "200229030037030020002000290350370338419180c080004107200041386a411441011081" - "808080001a200041d0006a41186a2203420037030020014200370300200242003703002000" - "42003703500240200041386a4114200041d0006a41201083808080004101480d00200041d0" - "206a41186a2003290300370300200041d0206a41106a200041d0006a41106a290300370300" - "200041d0206a41086a200041d0006a41086a290300370300200020002903503703d0202000" - "41d0206a41204100108480808000220241014e0d020b417c21010c050b417d21010c040b20" - "004200370350417c2101200241828018200041d0006a41081085808080004108470d034198" - "80c08000410f200029035022041086808080001a0240418020450d00200041d0006a410041" - "8020fc0b000b0240419b801c200041d0006a418020108280808000220241014e0d00417b21" - "010c040b41a780c08000410a2002ad1086808080001a0240200241084d0d00417a21010c04" - "0b41b180c080004107200041d0006a200241011081808080001a4100210142002105034020" - "05420886200041d0006a20016a3100008421052002200141016a2201470d000b41b880c080" - "00412120051086808080001a200041003602d0200240200041d0206a410410878080800041" - "004e0d00417921010c040b41d980c08000411520003402d0201086808080001a2000108980" - "80800020002802004101710d02417821010c030b417f21010c020b417e21010c010b41ee80" - "c08000411620002802042201ac1086808080001a200041086a200041206a4114108a808080" - "004520042005587120002802d02020014e7121010b200041f0206a24808080800020010b4e" - "01027f23808080800041106b22012480808080002001410036020c41a580082001410c6a41" - "0410828080800021022000200128020c3602042000200241004a360200200141106a248080" - "8080000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205" - "470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21" - "030b20030b0b8e010100418080c0000b8401202073656e6465723a20206f776e65723a2020" - "646573743a2020646573745f62616c616e63653a2020646174615f6c656e2020646174613a" - "20207468726573686f6c645f62616c616e63652c2075736520646174615b695d3a20207061" - "72656e745f6c65646765725f74696d653a2020657363726f775f66696e6973685f61667465" - "723a00d804046e616d650016157872706c5f7374645f6578616d706c652e7761736d019804" - "0b00335f5a4e387872706c5f73746434686f737431326765745f74785f6669656c64313768" - "6465316434383636346263336138346145012b5f5a4e387872706c5f73746434686f737435" - "7472616365313768316265343662336564373737306363624502435f5a4e387872706c5f73" - "746434686f737432386765745f63757272656e745f6c65646765725f6f626a5f6669656c64" - "313768343532633531353638653033353531384503355f5a4e387872706c5f73746434686f" - "737431346163636f756e745f6b65796c657431376833373666663761383330656262653762" - "4504375f5a4e387872706c5f73746434686f7374313663616368655f6c65646765725f6f62" - "6a3137686463616435366531366262633331653345053b5f5a4e387872706c5f7374643468" - "6f737432306765745f6c65646765725f6f626a5f6669656c64313768636238336534653664" - "3132616230633245062f5f5a4e387872706c5f73746434686f73743974726163655f6e756d" - "3137683236313936306163653839633831313845073d5f5a4e387872706c5f73746434686f" - "737432326765745f706172656e745f6c65646765725f74696d653137686234636264356664" - "336463326230383445080666696e69736809415f5a4e387872706c5f73746433316765745f" - "63757272656e745f657363726f775f66696e6973685f616674657231376863333562336366" - "356633353733363933450a066d656d636d70071201000f5f5f737461636b5f706f696e7465" - "72090a0100072e726f64617461004d0970726f64756365727302086c616e67756167650104" - "52757374000c70726f6365737365642d6279010572757374631d312e38372e302028313730" - "36376539616320323032352d30352d3039290094010f7461726765745f6665617475726573" - "082b0b62756c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c" - "2d696e6469726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d75746162" - "6c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f72656665" - "72656e63652d74797065732b087369676e2d657874"; + "0061736d0100000001540c60027f7f017f60047f7f7f7f017f60037f7f7f" + "017f60057f7f7f7f7f017f60017f017f60037f7f7f0060037f7f7e017f60" + "087f7f7f7f7f7f7f7f017f60067f7f7f7f7f7f017f60017f0060027f7f00" + "6000017f0295061908686f73745f6c69620c6765745f74785f6669656c64" + "000208686f73745f6c69620974726163655f6e756d000608686f73745f6c" + "6962057472616365000308686f73745f6c69620e6765745f6c6564676572" + "5f73716e000008686f73745f6c6962166765745f706172656e745f6c6564" + "6765725f74696d65000008686f73745f6c6962166765745f706172656e74" + "5f6c65646765725f68617368000008686f73745f6c6962136765745f7478" + "5f6e65737465645f6669656c64000108686f73745f6c6962106765745f74" + "785f61727261795f6c656e000408686f73745f6c6962176765745f74785f" + "6e65737465645f61727261795f6c656e000008686f73745f6c69621c6765" + "745f63757272656e745f6c65646765725f6f626a5f6669656c6400020868" + "6f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a" + "5f6e65737465645f6669656c64000108686f73745f6c6962206765745f63" + "757272656e745f6c65646765725f6f626a5f61727261795f6c656e000408" + "686f73745f6c6962276765745f63757272656e745f6c65646765725f6f62" + "6a5f6e65737465645f61727261795f6c656e000008686f73745f6c69620e" + "6163636f756e745f6b65796c6574000108686f73745f6c69621063616368" + "655f6c65646765725f6f626a000208686f73745f6c6962146765745f6c65" + "646765725f6f626a5f6669656c64000108686f73745f6c69621b6765745f" + "6c65646765725f6f626a5f6e65737465645f6669656c64000308686f7374" + "5f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e00" + "0008686f73745f6c69621f6765745f6c65646765725f6f626a5f6e657374" + "65645f61727261795f6c656e000208686f73745f6c69621163726564656e" + "7469616c5f6b65796c6574000708686f73745f6c69620d657363726f775f" + "6b65796c6574000308686f73745f6c69620d6f7261636c655f6b65796c65" + "74000308686f73745f6c696213636f6d707574655f7368613531325f6861" + "6c66000108686f73745f6c6962076765745f6e6674000808686f73745f6c" + "69620b7570646174655f6461746100000306050505090a0b050301001106" + "19037f01418080c0000b7f0041eb99c0000b7f0041f099c0000b072e0406" + "6d656d6f727902000666696e697368001d0a5f5f646174615f656e640301" + "0b5f5f686561705f6261736503020a951d051900200241214f0440000b20" + "002002360204200020013602000b1900200241094f0440000b2000200236" + "0204200020013602000b970101057f230041206b22012400200141186a22" + "044100360200200141106a22054200370300200142003703080240418180" + "20200141086a411410002203411447044002402003410048044020002003" + "3602040c010b2000417f3602040b410121020c010b200020012903083700" + "01200041116a2004280200360000200041096a20052903003700000b2000" + "20023a0000200141206a24000b450020012d000045044020002001290001" + "370000200041106a200141116a280000360000200041086a200141096a29" + "00003700000f0b418080c000410b20013402041001000bff1a01097f2300" + "41c0036b22002400418b80c000411b41014100410110021a41a680c00041" + "2841014100410110021a41f680c000412b41014100410110021a20004200" + "370380010240024002400240024002400240024020004180016a22064108" + "1003220141004a044041a181c000411d2001ad10011a200041406b200620" + "01101a41be81c000411020002802402000280244410110021a2000420037" + "03a001200041a0016a220341081004220141004c0d0141ce81c000411920" + "01ad10011a200041386a20032001101a41e781c000411120002802382000" + "28023c410110021a200041d8016a22024200370300200041d0016a220542" + "00370300200041c8016a22044200370300200042003703c001200041c001" + "6a22074120100522014120470d0241f881c000411320074120410110021a" + "418b82c000412041014100410110021a419883c000412e41014100410110" + "021a200041b0016a4100360200200041a8016a4200370300200042003703" + "a0014181802020034114100022014114470d0341c683c000411420034114" + "410110021a20004200370380014188801820064108100022014108470d04" + "41da83c0004117420810011a41f183c000412820064108410110021a2000" + "410036026041848008200041e0006a22034104100022014104470d054199" + "84c000411520034104410110021a200041013b004c200242003703002005" + "420037030020044200370300200042003703c0010240200041cc006a4102" + "200741201006220141004e044041ae84c00041142001ad10011a20004130" + "6a20072001101941c284c000410d20002802302000280234410110021a0c" + "010b41cf84c00041292001ac10011a0b41f884c00041154183803c1007ac" + "10011a418d85c00041134189803c1007ac10011a0240200041cc006a4102" + "1008220141004e044041a085c00041142001ad10011a0c010b41b485c000" + "412d2001ac10011a0b41e185c000412341014100410110021a419a87c000" + "413341014100410110021a20004200370380014182801820004180016a22" + "0141081009220341004c0d062003410846044041cd87c000412b42081001" + "1a41f887c000412f20014108410110021a0c080b41a788c000412f2003ad" + "10011a200041286a20004180016a2003101a41d688c00041172000280228" + "200028022c410110021a0c070b41fb82c000411d2001ac10011a419b7f21" + "020c070b41d682c00041252001ac10011a419a7f21020c060b41ab82c000" + "412b2001ac10011a41997f21020c050b41f086c000412a2001ac10011a41" + "b77e21020c040b41af86c00041c1002001ac10011a41b67e21020c030b41" + "8486c000412b2001ac10011a41b57e21020c020b41ed88c00041c5002003" + "ac10011a0b200041b0016a4100360200200041a8016a4200370300200042" + "003703a0010240024002400240024002400240024041818020200041a001" + "6a220141141009220341004a0440200341154f0d0241b289c000411e2001" + "2003410110021a0c010b41d089c00041332003ac10011a0b200041013b00" + "60200041d8016a4200370300200041d0016a4200370300200041c8016a42" + "00370300200042003703c0010240200041e0006a4102200041c0016a2201" + "4120100a220341004e044041838ac000411c2003ad10011a200041206a20" + "0120031019419f8ac000411520002802202000280224410110021a0c010b" + "41b48ac00041392003ac10011a0b41ed8ac00041244183803c100bac1001" + "1a0240200041e0006a4102100c220141004e044041918bc000411c2001ad" + "10011a0c010b41ad8bc000413d2001ac10011a0b41ea8bc0004128410141" + "00410110021a41928cc000412f41014100410110021a200041c0016a2203" + "101b20004180016a22012003101c200041b8016a4200370300200041b001" + "6a4200370300200041a8016a4200370300200042003703a0012001411420" + "0041a0016a22034120100d22014120470d01200341204100100e22044100" + "4a044041c18cc00041232004ad10011a2000420037036020044182801820" + "0041e0006a22014108100f220341004c0d032003410846044041e48cc000" + "412a420810011a418e8dc000412e20014108410110021a0c070b41bc8dc0" + "00412e2003ad10011a200041186a200041e0006a2003101a41ea8dc00041" + "162000280218200028021c410110021a0c060b41a290c000413c2004ac10" + "011a200041d8016a4200370300200041d0016a4200370300200041c8016a" + "4200370300200042003703c001410141828018200041c0016a4120100f22" + "014100480d030c040b000b41f692c000412e2001ac10011a41ef7c21020c" + "050b41808ec000412b2003ac10011a0c020b41de90c00041c1002001ac10" + "011a0b200041013b00604101200041e0006a4102200041c0016a41201010" + "22014100480440419f91c00041352001ac10011a0b41014183803c101122" + "01410048044041d491c00041322001ac10011a0b4101200041e0006a4102" + "101222014100480440418692c00041392001ac10011a0b41bf92c0004137" + "41014100410110021a0c010b200041013b004c200041d8016a4200370300" + "200041d0016a4200370300200041c8016a4200370300200042003703c001" + "02402004200041cc006a4102200041c0016a220141201010220341004e04" + "4041ab8ec000411b2003ad10011a200041106a20012003101941c68ec000" + "411420002802102000280214410110021a0c010b41da8ec00041312003ac" + "10011a0b418b8fc000412320044183803c1011ac10011a02402004200041" + "cc006a41021012220141004e044041ae8fc000411b2001ad10011a0c010b" + "41c98fc00041352001ac10011a0b41fe8fc000412441014100410110021a" + "0b41a493c000412f41014100410110021a200041c0016a2201101b200041" + "cc006a22042001101c200041f8006a4200370300200041f0006a42003703" + "00200041e8006a4200370300200042003703600240024002400240024002" + "4020044114200041e0006a22034120100d2201412046044041d393c00041" + "0f20034120410110021a20004198016a420037030020004190016a420037" + "030020004188016a42003703002000420037038001024020044114200441" + "1441e293c000410920004180016a220141201013220341004a0440200041" + "086a20012003101941ea93c00041122000280208200028020c410110021a" + "0c010b41fc93c000413c2003ac10011a0b200041b8016a22064200370300" + "200041b0016a22024200370300200041a8016a2205420037030020004200" + "3703a001200041cc006a2203411441e807200041a0016a22084120101422" + "014120470d0141b894c000410e20084120410110021a200041d8016a4200" + "370300200041d0016a4200370300200041c8016a42003703002000420037" + "03c00120034114412a200041c0016a22044120101522014120470d0241c6" + "94c000410e20044120410110021a41d494c000412441014100410110021a" + "41cd95c000412541014100410110021a20004198016a4200370300200041" + "90016a420037030020004188016a4200370300200042003703800141f295" + "c000411720004180016a22034120101622014120470d03418996c000410b" + "41f295c0004117410110021a419496c000411120034120410110021a2004" + "101b200041e0006a22072004101c20064200370300200242003703002005" + "4200370300200042003703a0010240200422022002410020026b41037122" + "036a22054f0d0020030440200321010340200241003a0000200241016a21" + "02200141016b22010d000b0b200341016b4107490d000340200241003a00" + "00200241076a41003a0000200241066a41003a0000200241056a41003a00" + "00200241046a41003a0000200241036a41003a0000200241026a41003a00" + "00200241016a41003a0000200241086a22022005470d000b0b2005418002" + "20036b2201417c716a220220054b0440034020054100360200200541046a" + "22052002490d000b0b024020022001410371220120026a22034f0d002001" + "220504400340200241003a0000200241016a2102200541016b22050d000b" + "0b200141016b4107490d000340200241003a0000200241076a41003a0000" + "200241066a41003a0000200241056a41003a0000200241046a41003a0000" + "200241036a41003a0000200241026a41003a0000200241016a41003a0000" + "200241086a22022003470d000b0b02402007411420084120200441800210" + "17220141004a044041a596c00041102001ad10011a20014181024f0d0641" + "b596c000410920042001410110021a0c010b41be96c000412e2001ac1001" + "1a0b41ec96c000411241fe96c00041074101100222014100480d05418597" + "c000411d2001ad10011a41a297c0004111422a10014100480d0641b397c0" + "00411c420010011a4101210241cf97c000411a41014100410110021a41bb" + "98c000412941014100410110021a41e498c000412810182201450440418c" + "99c000412741e498c0004128410110021a41b399c000411e410141004101" + "10021a41ce80c000412841014100410110021a0c080b41d199c000411a20" + "01ac10011a41c37a21020c070b41b095c000411d2001ac10011a418b7c21" + "020c060b419495c000411c2001ac10011a41897c21020c050b41f894c000" + "411c2001ac10011a41887c21020c040b419998c00041222001ac10011a41" + "a77b21020c030b000b418398c00041162001ac10011a41a57b21020c010b" + "41e997c000411a42a47b10011a41a47b21020b200041c0036a240020020b" + "0bf5190100418080c0000beb196572726f725f636f64653d3d3d3d20484f" + "53542046554e4354494f4e532054455354203d3d3d54657374696e672032" + "3620686f73742066756e6374696f6e732028372063617465676f72696573" + "29535543434553533a20416c6c20686f73742066756e6374696f6e207465" + "73747320706173736564212d2d2d2043617465676f727920313a204c6564" + "676572204865616465722046756e6374696f6e73202d2d2d4c6564676572" + "2073657175656e6365206e756d6265722062797465733a4c656467657220" + "73716e20646174613a506172656e74206c65646765722074696d65206279" + "7465733a506172656e742074696d6520646174613a506172656e74206c65" + "6467657220686173683a535543434553533a204c65646765722068656164" + "65722066756e6374696f6e734552524f523a206765745f706172656e745f" + "6c65646765725f686173682077726f6e67206c656e6774683a4552524f52" + "3a206765745f706172656e745f6c65646765725f74696d65206661696c65" + "643a4552524f523a206765745f6c65646765725f73716e206661696c6564" + "3a2d2d2d2043617465676f727920323a205472616e73616374696f6e2044" + "6174612046756e6374696f6e73202d2d2d5472616e73616374696f6e2041" + "63636f756e743a5472616e73616374696f6e20466565206c656e6774683a" + "5472616e73616374696f6e20466565202873657269616c697a6564205852" + "5020616d6f756e74293a5472616e73616374696f6e2053657175656e6365" + "3a4e6573746564206669656c64206c656e6774683a4e6573746564206669" + "656c643a494e464f3a206765745f74785f6e65737465645f6669656c6420" + "6e6f74206170706c696361626c653a5369676e657273206172726179206c" + "656e6774683a4d656d6f73206172726179206c656e6774683a4e65737465" + "64206172726179206c656e6774683a494e464f3a206765745f74785f6e65" + "737465645f61727261795f6c656e206e6f74206170706c696361626c653a" + "535543434553533a205472616e73616374696f6e20646174612066756e63" + "74696f6e734552524f523a206765745f74785f6669656c64285365717565" + "6e6365292077726f6e67206c656e6774683a4552524f523a206765745f74" + "785f6669656c6428466565292077726f6e67206c656e6774682028657870" + "6563746564203820627974657320666f7220585250293a4552524f523a20" + "6765745f74785f6669656c64284163636f756e74292077726f6e67206c65" + "6e6774683a2d2d2d2043617465676f727920333a2043757272656e74204c" + "6564676572204f626a6563742046756e6374696f6e73202d2d2d43757272" + "656e74206f626a6563742062616c616e6365206c656e6774682028585250" + "20616d6f756e74293a43757272656e74206f626a6563742062616c616e63" + "65202873657269616c697a65642058525020616d6f756e74293a43757272" + "656e74206f626a6563742062616c616e6365206c656e67746820286e6f6e" + "2d58525020616d6f756e74293a43757272656e74206f626a656374206261" + "6c616e63653a494e464f3a206765745f63757272656e745f6c6564676572" + "5f6f626a5f6669656c642842616c616e636529206661696c656420286d61" + "79206265206578706563746564293a43757272656e74206c656467657220" + "6f626a656374206163636f756e743a494e464f3a206765745f6375727265" + "6e745f6c65646765725f6f626a5f6669656c64284163636f756e74292066" + "61696c65643a43757272656e74206e6573746564206669656c64206c656e" + "6774683a43757272656e74206e6573746564206669656c643a494e464f3a" + "206765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" + "5f6669656c64206e6f74206170706c696361626c653a43757272656e7420" + "6f626a656374205369676e657273206172726179206c656e6774683a4375" + "7272656e74206e6573746564206172726179206c656e6774683a494e464f" + "3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465" + "645f61727261795f6c656e206e6f74206170706c696361626c653a535543" + "434553533a2043757272656e74206c6564676572206f626a656374206675" + "6e6374696f6e732d2d2d2043617465676f727920343a20416e79204c6564" + "676572204f626a6563742046756e6374696f6e73202d2d2d537563636573" + "7366756c6c7920636163686564206f626a65637420696e20736c6f743a43" + "6163686564206f626a6563742062616c616e6365206c656e677468202858" + "525020616d6f756e74293a436163686564206f626a6563742062616c616e" + "6365202873657269616c697a65642058525020616d6f756e74293a436163" + "686564206f626a6563742062616c616e6365206c656e67746820286e6f6e" + "2d58525020616d6f756e74293a436163686564206f626a6563742062616c" + "616e63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c" + "642842616c616e636529206661696c65643a436163686564206e65737465" + "64206669656c64206c656e6774683a436163686564206e65737465642066" + "69656c643a494e464f3a206765745f6c65646765725f6f626a5f6e657374" + "65645f6669656c64206e6f74206170706c696361626c653a436163686564" + "206f626a656374205369676e657273206172726179206c656e6774683a43" + "6163686564206e6573746564206172726179206c656e6774683a494e464f" + "3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f" + "6c656e206e6f74206170706c696361626c653a535543434553533a20416e" + "79206c6564676572206f626a6563742066756e6374696f6e73494e464f3a" + "2063616368655f6c65646765725f6f626a206661696c6564202865787065" + "6374656420776974682074657374206669787475726573293a494e464f3a" + "206765745f6c65646765725f6f626a5f6669656c64206661696c65642061" + "7320657870656374656420286e6f20636163686564206f626a656374293a" + "494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6669" + "656c64206661696c65642061732065787065637465643a494e464f3a2067" + "65745f6c65646765725f6f626a5f61727261795f6c656e206661696c6564" + "2061732065787065637465643a494e464f3a206765745f6c65646765725f" + "6f626a5f6e65737465645f61727261795f6c656e206661696c6564206173" + "2065787065637465643a535543434553533a20416e79206c656467657220" + "6f626a6563742066756e6374696f6e732028696e74657266616365207465" + "73746564294552524f523a206163636f756e745f6b65796c657420666169" + "6c656420666f722063616368696e6720746573743a2d2d2d204361746567" + "6f727920353a204b65796c65742047656e65726174696f6e2046756e6374" + "696f6e73202d2d2d4163636f756e74206b65796c65743a54657374547970" + "6543726564656e7469616c206b65796c65743a494e464f3a206372656465" + "6e7469616c5f6b65796c6574206661696c65642028657870656374656420" + "2d20696e74657266616365206973737565293a457363726f77206b65796c" + "65743a4f7261636c65206b65796c65743a535543434553533a204b65796c" + "65742067656e65726174696f6e2066756e6374696f6e734552524f523a20" + "6f7261636c655f6b65796c6574206661696c65643a4552524f523a206573" + "63726f775f6b65796c6574206661696c65643a4552524f523a206163636f" + "756e745f6b65796c6574206661696c65643a2d2d2d2043617465676f7279" + "20363a205574696c6974792046756e6374696f6e73202d2d2d48656c6c6f" + "2c205852504c205741534d20776f726c6421496e70757420646174613a53" + "48413531322068616c6620686173683a4e46542064617461206c656e6774" + "683a4e465420646174613a494e464f3a206765745f6e6674206661696c65" + "6420286578706563746564202d206e6f2073756368204e4654293a546573" + "74207472616365206d6573736167657061796c6f61645472616365206675" + "6e6374696f6e206279746573207772697474656e3a54657374206e756d62" + "657220747261636554726163655f6e756d2066756e6374696f6e20737563" + "636565646564535543434553533a205574696c6974792066756e6374696f" + "6e734552524f523a2074726163655f6e756d2829206661696c65643a4552" + "524f523a2074726163652829206661696c65643a4552524f523a20636f6d" + "707574655f7368613531325f68616c66206661696c65643a2d2d2d204361" + "7465676f727920373a2044617461205570646174652046756e6374696f6e" + "73202d2d2d55706461746564206c656467657220656e7472792064617461" + "2066726f6d205741534d20746573745375636365737366756c6c79207570" + "6461746564206c656467657220656e74727920776974683a535543434553" + "533a2044617461207570646174652066756e6374696f6e734552524f523a" + "207570646174655f64617461206661696c65643a00550970726f64756365" + "727302086c616e6775616765010452757374000c70726f6365737365642d" + "62790105727573746325312e38362e302d6e696768746c79202862336233" + "363861313820323032352d30312d30352900490f7461726765745f666561" + "7475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" + "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c" + "7565"; std::string const deepRecursionHex = "0061736d01000000013f0b60017f0060037f7f7f017f60027f7f017f60027f" @@ -11598,92 +11774,6 @@ std::string const deepRecursionHex = "2d676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" "2d657874"; -extern std::string const hostFunctions2Hex = - "0061736d01000000012f0760047f7f7f7f017f60037f7f7f017f60027f7f" - "017f60057f7f7f7f7f017f60037f7f7e017f60017f017f6000017f028a02" - "0a08686f73745f6c6962057472616365000308686f73745f6c69620c6765" - "745f74785f6669656c64000108686f73745f6c69620974726163655f6e75" - "6d000408686f73745f6c69620e6163636f756e745f6b65796c6574000008" - "686f73745f6c69621063616368655f6c65646765725f6f626a000108686f" - "73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000008" - "686f73745f6c6962136765745f74785f6e65737465645f6669656c640000" - "08686f73745f6c6962106765745f74785f61727261795f6c656e00050868" - "6f73745f6c6962176765745f74785f6e65737465645f61727261795f6c65" - "6e000208686f73745f6c69620b7570646174655f64617461000203020106" - "05030100110619037f01418080c0000b7f00419187c0000b7f0041a087c0" - "000b072e04066d656d6f727902000666696e697368000a0a5f5f64617461" - "5f656e6403010b5f5f686561705f6261736503020ae50701e20701057f23" - "0041e0006b2201240041b580c000411b41014100410110001a41f380c000" - "412841014100410110001a200141d0006a4100360200200141c8006a4200" - "370300200142003703400240024002400240024002400240418180202001" - "41406b22004114100122024114460440419b81c000410e20004114410110" - "001a2001420037032041888018200141206a41081001220041004c0d0141" - "a981c00041112000ad10021a2001410036020841848008200141086a4104" - "1001220041004c044041d081c00041252000ac10021a0c070b41ba81c000" - "41162000ad10021a41bf82c000412841014100410110001a200141306a22" - "034100360200200141286a22044200370300200142003703204181802020" - "0141206a22024114100122004100480d0220012000360238200141143602" - "3c20004114470d03200141106a2004290300370300200141186a20032802" - "0036020020012001290320370308200141d8006a4200370300200141d000" - "6a4200370300200141c8006a420037030020014200370340024002402001" - "41086a4114200141406b220341201003220041004a044041e782c000410f" - "20034120410110001a41f682c00041172000ad10021a2003200041001004" - "220041004c0d01418d83c00041162000ad10021a20014200370320200041" - "828018200241081005220041004a044041a383c00041152000ad10021a20" - "0041094f0d0841b883c000410e20022000410110001a0c030b41c683c000" - "412b2000ac10021a0c020b41ac84c000411d2000ac10021a417e21000c09" - "0b41f183c000413b2000ac10021a0b41c984c00041234101410041011000" - "1a200141d8006a4200370300200141d0006a4200370300200141c8006a42" - "0037030020014200370340024041ec84c0004102200141406b2202412010" - "06220041004e044041ee84c000411e2000ad10021a200041214f0d07418c" - "85c000411220022000410110001a0c010b419e85c00041292000ac10021a" - "0b02404183803c10072200410048044041c785c00041202000ac10021a0c" - "010b41e785c00041152000ad10021a0b024041ec84c00041021008220041" - "0048044041fc85c000411f2000ac10021a0c010b419b86c00041142000ad" - "10021a0b4101210041af86c000412241014100410110001a41d186c00041" - "0e10092202044041f786c000411a2002ac10021a417c21000c080b41df86" - "c000411841d186c000410e410110001a41d080c000412341014100410110" - "001a0c070b419582c000412a2002ac10021a0c050b41f581c00041202000" - "ac10021a0c040b418080c00041354100410041001000000b200141003602" - "40230041106b2400000b000b000b417f21000b200141e0006a240020000b" - "0b9b070100418080c0000b9107486f73742066756e6374696f6e20676574" - "5f63757272656e745f657363726f775f66696e6973685f6669656c642066" - "61696c6564213d3d3d20484f53542046554e4354494f4e53205445535420" - "3d3d3d535543434553533a20486f73742066756e6374696f6e2074657374" - "73207061737365642d2d2d205465737420313a205472616e73616374696f" - "6e204669656c6420416363657373202d2d2d4163636f756e74206669656c" - "643a466565206669656c64206c656e6774683a53657175656e6365206669" - "656c64206c656e6774683a4552524f523a206765745f74785f6669656c64" - "2853657175656e636529206661696c65643a4552524f523a206765745f74" - "785f6669656c642846656529206661696c65643a4552524f523a20676574" - "5f74785f6669656c64284163636f756e74292077726f6e67206c656e6774" - "683a2d2d2d205465737420323a204c6564676572204f626a656374204f70" - "65726174696f6e73202d2d2d4163636f756e74206b65796c65743a4b6579" - "6c65742062797465732067656e6572617465643a4f626a65637420636163" - "68656420696e20736c6f743a42616c616e6365206669656c64206c656e67" - "74683a42616c616e6365206669656c643a494e464f3a206765745f6c6564" - "6765725f6f626a5f6669656c642842616c616e636529206661696c65643a" - "494e464f3a2063616368655f6c65646765725f6f626a206661696c656420" - "28657870656374656420666f722074657374206669787475726573293a45" - "52524f523a206163636f756e745f6b65796c6574206661696c65643a2d2d" - "2d205465737420333a204e6573746564204669656c642041636365737320" - "2d2d2d01024e6573746564206669656c6420616363657373207375636365" - "656465643a4e6573746564206669656c6420646174613a494e464f3a2067" - "65745f74785f6e65737465645f6669656c64206e6f74206170706c696361" - "626c653a494e464f3a204e6f207369676e657273206172726179206f7220" - "6572726f723a5369676e657273206172726179206c656e6774683a494e46" - "4f3a204e6f206e6573746564206172726179206f72206572726f723a4e65" - "73746564206172726179206c656e6774683a2d2d2d205465737420343a20" - "5374617465204d6f64696669636174696f6e202d2d2d746573745f737461" - "74655f31323353746174652075706461746564207769746820646174613a" - "4552524f523a207570646174655f64617461206661696c65643a00550970" - "726f64756365727302086c616e6775616765010452757374000c70726f63" - "65737365642d62790105727573746325312e38362e302d6e696768746c79" - "202862336233363861313820323032352d30312d30352900490f74617267" - "65745f6665617475726573042b0f6d757461626c652d676c6f62616c732b" - "087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" - "6c746976616c7565"; - extern std::string const reqNonexistentField = "0061736d0100000001120360027f7f0060047f7f7f7f017f6000017f02200108686f73745f" "6c6962136765745f74785f6e65737465645f6669656c640001030403020000050301001006" diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index aa560580ff..97b2236d1b 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -51,10 +51,6 @@ extern std::string const zkProofHex; extern std::string const sp1_wasm; -extern std::string const xrplStdExampleHex; - -extern std::string const hostFunctions2Hex; - extern std::string const reqNonexistentField; extern std::string const hfPerfTest; diff --git a/src/xrpld/app/misc/WasmHostFuncImpl.cpp b/src/xrpld/app/misc/WasmHostFuncImpl.cpp index e35af622d4..152c946c7c 100644 --- a/src/xrpld/app/misc/WasmHostFuncImpl.cpp +++ b/src/xrpld/app/misc/WasmHostFuncImpl.cpp @@ -92,33 +92,41 @@ getAnyFieldData(STBase const* obj) return Unexpected(HostFunctionError::NOT_LEAF_FIELD); break; case STI_ACCOUNT: { - auto const& account(static_cast(obj)); + auto const* account(static_cast(obj)); auto const& data = account->value(); return Bytes{data.begin(), data.end()}; } break; - case STI_AMOUNT: { - auto const& amount(static_cast(obj)); - int64_t const data = amount->xrp().drops(); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return Bytes{b, e}; + case STI_AMOUNT: + // will be processed by serializer + break; + case STI_ISSUE: { + auto const* issue(static_cast(obj)); + Asset const& asset(issue->value()); + // XRP and IOU will be processed by serializer + if (!asset.holds()) + { + // MPT + auto const& mptIssue = asset.get(); + auto const& mptID = mptIssue.getMptID(); + return Bytes{mptID.cbegin(), mptID.cend()}; + } } break; case STI_VL: { - auto const& vl(static_cast(obj)); + auto const* vl(static_cast(obj)); auto const& data = vl->value(); return Bytes{data.begin(), data.end()}; } break; case STI_UINT256: { - auto const& num(static_cast const*>(obj)); + auto const* num(static_cast const*>(obj)); auto const& data = num->value(); return Bytes{data.begin(), data.end()}; } break; case STI_UINT32: { - auto const& num(static_cast const*>(obj)); + auto const* num(static_cast const*>(obj)); std::uint32_t const data = num->value(); auto const* b = reinterpret_cast(&data); auto const* e = reinterpret_cast(&data + 1); @@ -131,8 +139,9 @@ getAnyFieldData(STBase const* obj) Serializer msg; obj->add(msg); + auto const data = msg.getData(); - return msg.getData(); + return data; } Expected @@ -600,13 +609,13 @@ WasmHostFunctionsImpl::trace( bool asHex) { #ifdef DEBUG_OUTPUT - auto j = ctx.journal.error(); + auto j = getJournal().error(); #else - auto j = ctx.journal.trace(); + auto j = getJournal().trace(); #endif if (!asHex) { - j << "WAMR TRACE (" << leKey.key << "): " << msg << " - " + j << "WAMR TRACE (" << leKey.key << "): " << msg << " " << std::string_view( reinterpret_cast(data.data()), data.size()); } @@ -614,8 +623,9 @@ WasmHostFunctionsImpl::trace( { std::string hex; hex.reserve(data.size() * 2); - boost::algorithm::hex(data.begin(), data.end(), hex.begin()); - j << "WAMR DEV TRACE (" << leKey.key << "): " << msg << " - " << hex; + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + j << "WAMR DEV TRACE (" << leKey.key << "): " << msg << " " << hex; } return msg.size() + data.size() * (asHex ? 2 : 1); @@ -625,13 +635,11 @@ Expected WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) { #ifdef DEBUG_OUTPUT - auto j = ctx.journal.error(); + auto j = getJournal().error(); #else - auto j = ctx.journal.trace(); + auto j = getJournal().trace(); #endif - - j << "WAMR DEV TRACE (" << leKey.key << "): " << msg << " - " << data; - + j << "WAMR TRACE NUM(" << leKey.key << "): " << msg << " " << data; return msg.size() + sizeof(data); } diff --git a/src/xrpld/app/misc/WasmHostFuncWrapper.cpp b/src/xrpld/app/misc/WasmHostFuncWrapper.cpp index c2b321e85a..9fae700988 100644 --- a/src/xrpld/app/misc/WasmHostFuncWrapper.cpp +++ b/src/xrpld/app/misc/WasmHostFuncWrapper.cpp @@ -98,13 +98,14 @@ getDataSlice(IW const* rt, wasm_val_vec_t const* params, int32_t& i) { auto const src = params->data[i].of.i32; auto const ssz = params->data[i + 1].of.i32; - if (src < 0 || ssz <= 0) + if (src < 0 || ssz < 0) return Unexpected(HostFunctionError::INVALID_PARAMS); + if (!ssz) + return Slice(); + if (ssz > maxWasmDataLength) - { return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); - } auto mem = rt ? rt->getMem() : wmem(); if (!mem.s) @@ -245,22 +246,6 @@ returnResult( } } -wasm_trap_t* -getLedgerSqnOld_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) -{ - auto* hf = reinterpret_cast(env); - // auto const* rt = reinterpret_cast(hf->getRT()); - auto const sqn = hf->getLedgerSqn(); - if (!sqn) - { - return hfResult(results, sqn.error()); - } - return hfResult(results, static_cast(sqn.value())); -} - wasm_trap_t* getLedgerSqn_wrap( void* env, @@ -1172,7 +1157,7 @@ testGetDataIncrement() int index = 0; auto const result = getDataSlice(&rt, ¶ms, index); - if (!result || result.value() != Slice(buffer.data(), 3)) + if (!result || result.value() != Slice(buffer.data(), 3) || index != 2) return false; } @@ -1188,7 +1173,8 @@ testGetDataIncrement() if (!result || result.value() != std::string_view( - reinterpret_cast(buffer.data()), 5)) + reinterpret_cast(buffer.data()), 5) || + index != 2) return false; } @@ -1205,7 +1191,7 @@ testGetDataIncrement() int index = 0; auto const result = getDataAccountID(&rt, ¶ms, index); - if (!result || result.value() != id) + if (!result || result.value() != id || index != 2) return false; } @@ -1221,7 +1207,23 @@ testGetDataIncrement() int index = 0; auto const result = getDataUInt256(&rt, ¶ms, index); - if (!result || result.value() != h1) + if (!result || result.value() != h1 || index != 2) + return false; + } + + { + // test Currency + + Currency const c = xrpCurrency(); + wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I32_VAL(0); + values[1] = WASM_I32_VAL(c.bytes); + memcpy(&buffer[0], c.data(), c.bytes); + + int index = 0; + auto const result = getDataCurrency(&rt, ¶ms, index); + if (!result || result.value() != c || index != 2) return false; } diff --git a/src/xrpld/app/misc/WasmHostFuncWrapper.h b/src/xrpld/app/misc/WasmHostFuncWrapper.h index 93b681009d..2259771632 100644 --- a/src/xrpld/app/misc/WasmHostFuncWrapper.h +++ b/src/xrpld/app/misc/WasmHostFuncWrapper.h @@ -23,13 +23,6 @@ namespace ripple { -using getLedgerSqnOld_proto = int32_t(); -wasm_trap_t* -getLedgerSqnOld_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); - using getLedgerSqn_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getLedgerSqn_wrap( diff --git a/src/xrpld/app/misc/WasmVM.cpp b/src/xrpld/app/misc/WasmVM.cpp index c9badfe460..0b94150db2 100644 --- a/src/xrpld/app/misc/WasmVM.cpp +++ b/src/xrpld/app/misc/WasmVM.cpp @@ -17,6 +17,10 @@ */ //============================================================================== +#ifdef _DEBUG +// #define DEBUG_OUTPUT 1 +#endif + #include #include #include @@ -38,10 +42,6 @@ createWasmImport(HostFunctions* hfs) { // clang-format off - // TODO: remove after escrow_test wasm module will be updated - WASM_IMPORT_FUNC2(i, getLedgerSqnOld, "getLedgerSqn", hfs, 60); - - WASM_IMPORT_FUNC2(i, getLedgerSqn, "get_ledger_sqn", hfs, 60); WASM_IMPORT_FUNC2(i, getParentLedgerTime, "get_parent_ledger_time", hfs, 60); WASM_IMPORT_FUNC2(i, getParentLedgerHash, "get_parent_ledger_hash", hfs, 60); @@ -111,12 +111,16 @@ runEscrowWasm( if (!ret) { - // std::cout << ", error: " << ret.error() << std::endl; +#ifdef DEBUG_OUTPUT + std::cout << ", error: " << ret.error() << std::endl; +#endif return Unexpected(ret.error()); } - // std::cout << ", ret: " << ret->result << ", gas spent: " << ret->cost << - // std::endl; +#ifdef DEBUG_OUTPUT + std::cout << ", ret: " << ret->result << ", gas spent: " << ret->cost + << std::endl; +#endif return EscrowResult{ret->result > 0, ret->cost}; }