FuelLabs / fuels-ts

Fuel Network Typescript SDK
https://docs.fuel.network/docs/fuels-ts/
Apache License 2.0
44.22k stars 1.34k forks source link

Add `bytecode` to factory outputted by `typegen` #2707

Closed nedsalk closed 1 month ago

nedsalk commented 2 months ago

We are currently outputting the bytecode of a contract in a separate file, which forces people to do two imports:

import { CallTestContractAbi__factory } from '../test/typegen/contracts';
import bytecode from '../test/typegen/contracts/CallTestContractAbi.hex';

By putting the bytecode on the factory and integrating it with the factory properly, this can be reduced to only one import:

import { CallTestContractAbi__factory } from '../test/typegen/contracts';

[!TIP] To maintain backwards compatibility and not make this a breaking change, we can continue exporting the file separately.

arboleya commented 2 months ago

Wouldn't this include the bytecode in the final bundle regardless of being in use?

nedsalk commented 2 months ago

Wouldn't this include the bytecode in the final bundle regardless of being in use?

If the factory is not in use then I believe it'll be treeshaken.

arboleya commented 2 months ago

I think it must be at least in a separate file:

import { Counter, deployCounter } from './typegend';

Pseudo code:

import { Account, DeployContractOptions, DeployContractResult, ContractFactory } from 'fuels';
import { Counter, abi, storageSlots } from './Counter'

export const counterBytecode = '0x1af03..';

export async function deployCounter(
  wallet: Account,
  options: DeployContractOptions = {}
): Promise<DeployContractResult<Counter>> {
  const factory = new ContractFactory(counterBytecode, abi, wallet);

  return factory.deployContract<Counter>({
    storageSlots,
    ...options,
  });
}