starknet-io / starknet.js

JavaScript library for StarkNet
https://www.starknetjs.com
MIT License
1.21k stars 739 forks source link

Account.declareAndDeploy returns uninformative error on invalid constructor calldata #830

Open FabijanC opened 10 months ago

FabijanC commented 10 months ago

Describe the bug I was experimenting with some contracts that require constructor arguments and some which don't. So I was trying to declare and deploy one which does, but forgot to provide them. I ended up getting this error:

TypeError: Cannot convert undefined to a BigInt
    at BigInt (<anonymous>)
    at toBigInt (/home/fabijanc/shardlabs/starknet-js-example/node_modules/starknet/src/utils/num.ts:15:10)
    at /home/fabijanc/shardlabs/starknet-js-example/node_modules/starknet/src/utils/transaction.ts:18:11
    at Array.forEach (<anonymous>)
    at transformCallsToMulticallArrays (/home/fabijanc/shardlabs/starknet-js-example/node_modules/starknet/src/utils/transaction.ts:15:9)
    at fromCallsToExecuteCalldata (/home/fabijanc/shardlabs/starknet-js-example/node_modules/starknet/src/utils/transaction.ts:38:35)
    at getExecuteCalldata (/home/fabijanc/shardlabs/starknet-js-example/node_modules/starknet/src/utils/transaction.ts:89:10)
    at Account.buildInvocation (/home/fabijanc/shardlabs/starknet-js-example/node_modules/starknet/src/account/default.ts:249:22)
    at Account.estimateInvokeFee (/home/fabijanc/shardlabs/starknet-js-example/node_modules/starknet/src/account/default.ts:124:35)

To Reproduce

After spawning starknet-devnet-rs with prefunded accounts, I tried running this script (omitted imports and constant definitions):

  const provider = new Provider({ rpc: { nodeUrl: "http://localhost:5050" } });
  const account = new Account(provider, accountAddress, accountPrivateKey);
  console.log(`Loaded account with address ${account.address}`);

  const compiledContract = await json.parse(
    fs.readFileSync(sierraPath).toString("ascii")
  );
  const compiledSierraCasm = await json.parse(
    fs.readFileSync(casmPath).toString("ascii")
  );

  console.log("Loaded artifacts");

  const declareDeployResponse = await account.declareAndDeploy(
    {
      contract: compiledContract,
      casm: compiledSierraCasm,
      // here one would specify the constructorCalldata - I forgot to
    },
    { maxFee: BigInt(1e18) }
  );

Expected behavior

Screenshots N/A

Desktop (please complete the following information):

ainnee commented 10 months ago

now everything is going good

ivpavici commented 7 months ago

@tabaktoni can we check if this is still relevant, used version was 5.19.5

ivpavici commented 2 months ago

@tabaktoni re-check please!