I want to call a function in my frontend. What are the methods to do this?
You can use .get()
or .call()
to call a function in your contract.
get()
is for read-only functions and doesn’t require a signature from the user. .call()
is for writing functions and requires a signature from the user.
Here is an example:
// Connects out Contract instance to the deployed contract
// address using the given wallet.
const contract = CounterContractAbi__factory.connect(CONTRACT_ID, wallet);
function App() {
useEffect(() => {
async function main() {
// Executes the counter function to query the current contract state
// the `.get()` is read-only, because of this it don't expand coins.
const { value } = await contract.functions.count().get();
In this example, we’re calling a function called count
with the .get()
method.
Check out the repo for this code to see a simple example.
Check out the developer quickstart for a step by step guide for creating a fullstack dapp on Fuel.
But, how do I call a function with a Vec parameter? The request ends with
Error: unexpected Vec decode (argument="struct", value="not implemented", code=INVALID_ARGUMENT, version=0.20.0)
for the call as follows:
const args = [
"0x4254430000000000000000000000000000000000000000000000000000000000",
];
const a = new VecCoder(new B256Coder()).getEncodedVectorData(args);
/// const b = new VecCoder(new B256Coder()).encode(args);
const result = await contract.functions.read_prices([a]).get();
The abi is
#[storage(read)]
fn read_prices(feed_ids: Vec<b256>) -> Vec<U256>;
You mean
const result = await contract.functions.read_prices(args).get();
?
No, that doesn’t work too. The same result.
OK, that’s because of returning Vec, not because of passing it as an argument, probably.
This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.