second-state/SOLL

Problem accessing solidity function from imported wasm binary in Javascript

Samboy76 opened this issue · 2 comments

Here´s the original solidity source code:

// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: %soll %s
contract HelloWorld {
   function sayHello() public pure returns (string) {
       return "Hello World";
   }
}

Javascript:

async function loadWasm() {
  const wasmBinary = fs.readFileSync('C:\\Samuel\\Blockchain\\Flashloan-arbitrage-bot-uniswapV2_hardhat_AAVE_flashloan\\artifacts\\helloWorld.wasm');

  const importObject = {
    ethereum: {
      finish: function() {
      }
    }
  };
  
  const instance = await WebAssembly.instantiate(wasmBinary, importObject);
  
  // Call the sayHello() function
  const result = instance.instance.exports.sayHello();
  console.log("Result:", result);
}
loadWasm();

Output:

Exported Functions and Objects: [ 'memory', 'main' ]
module: Module [WebAssembly.Module] {}
instance: [Function: 2]
exports: Module [WebAssembly.Module] {}

C:\Samuel\Blockchain\Flashloan-arbitrage-bot-uniswapV2_hardhat_AAVE_flashloan\runarb.js:46
const result = instance.instance.exports.sayHello();
^
TypeError: instance.instance.exports.sayHello is not a function

Would appreciate your help since I have followed the original steps guidance for solidity .sol compilation under README section. FYI there wasn´t any issue in generating the helloWorld.wasm object and can see hexadecimal byte codes inside the file which means the compilation process must have worked ok. Thank you!

hydai commented

SOLL follows the standard of EWASM. It will not export any public function defined by users to the export list. Instead, please use the EVM way to interact with the generated contracts.

Thanks for the reply. So I gather it’s nothing wrong with the SOLL compilation to the binary object then? Is there an -debug option to soll command line that would spit out any possible compilation errors? Can you kindly adjust the above JavaScript code snippet to work in EVM way as I’m a newbie in this space and have already spent several days on it trying to get this to work effectively. Thanks again for your help.