Skip to content

account.declare do not like compressed Cairo programs #588

@PhilippeR26

Description

@PhilippeR26

Describe the bug
I have many problems to use Account.declare in v5.5.0.

  1. Account.declare do not accept CairoContract type, only string|CompiledContract. It means that SierraContractClass is not authorized.
    So, use of Provider.getClassAt() or Provider.getClassByHash() with a Cairo1 class do not allow to use the result in account.declare.
  2. If I try to declare a compressed Cairo 0(LegacyContractClass), my script is now failing. json-bigint library has been replaced by lossless-json : it generate a crash in parse ; lossless-json seems to not accept LegacyContractClass.program. Also very problematic.

To Reproduce

async function main() {

    //initialize Provider with testnet2
    const providerTestnet2 = new Provider({ sequencer: { network: constants.NetworkName.SN_GOERLI2 } });
    console.log("Connected to testnet2.");

    //initialize Provider with devnet
    const providerDevnet = new Provider({ sequencer: { baseUrl: "http://127.0.0.1:5050" } });
    console.log('Connected to devnet.');

    // initialize existing predeployed account 0 of Devnet
    const privateKey = "0xe3e70682c2094cac629f6fbed82c07cd";
    const accountAddress = "0x7e00d496e324876bbc8531f2d9a82bf154d1a04a50218ee74cdd372f75a551a";
    const account0 = new Account(providerDevnet, accountAddress, privateKey);
    console.log('✅ OZ predeployed account 0 connected in devnet.');


    // recover & save contract
    const compressedContractProxy = await providerTestnet2.getClassByHash("0x025ec026985a3bf9d0cc1fe17326b245dfdc3ff89b8fde106542a3ea56c5a918");
    fs.writeFileSync('./compiledContracts/ArgentXproxy_0_2_3_1_compressed.json', JSON.stringify(compressedContractProxy));

    // declare in devnet
    if ('sierra_program' in compressedContractProxy) { throw new Error("Cairo 1 compressed not authorized in Starknet.js v5.5.0") }
    const progCompressed = compressedContractProxy.program;

    // 🚨🚨🚨 Fail in v5.5.0 ; crash in lossless-json library
    const declareResponse = await account0.declare({ contract: progCompressed });
    console.log("clashHash =", declareResponse.class_hash);

}
main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });

Expected behavior
Account.declare to accept CairoContract, and process it correctly.

Screenshots

SyntaxError: JSON value expected but got 'H' at position 0
    at expectValue (/home/edmond/Documents/starknet/starknet.js-workshop-typescript/node_modules/lossless-json/lib/esm/parse.js:201:13)
    at Object.t.parse (/home/edmond/Documents/starknet/starknet.js-workshop-typescript/node_modules/lossless-json/lib/esm/parse.js:36:3)
    at parse (/home/edmond/Documents/starknet/starknet.js-workshop-typescript/node_modules/starknet/src/utils/json.ts:12:47)
    at isSierra (/home/edmond/Documents/starknet/starknet.js-workshop-typescript/node_modules/starknet/src/utils/contract.ts:7:59)
    at extractContractHashes (/home/edmond/Documents/starknet/starknet.js-workshop-typescript/node_modules/starknet/src/utils/contract.ts:16:7)
    at Account.declare (/home/edmond/Documents/starknet/starknet.js-workshop-typescript/node_modules/starknet/src/account/default.ts:338:36)
    at main (/home/edmond/Documents/starknet/starknet.js-workshop-typescript/src/scripts/mainnet/2b.recoverCompiledContract.ts:50:44)

Desktop (please complete the following information):

  • Browser & version [e.g. chrome, safari, webworker]
  • Node version [e.g. 16.0.1]
  • Starknet.js version : V5.5.0
  • Network [devnet, testnet] devnet 0.5.0

Metadata

Metadata

Labels

Type: bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions