развертывание предварительно профинансированной учетной записи OZ с помощью starknet js

несколько спецификаций: работает на goerli alpha, starknet js 0.4.9

Я пытаюсь развернуть предварительно профинансированную учетную запись openzeppelin 0.5.0.

Я обнаружил, что хэш класса:ACC_CLASS_HASH=0x750cd490a7cd1572411169eaa8be292325990d33c5d4733655fe6b926985062

Затем я предварительно вычислил адрес, используя эту функцию

      export function calcAddress(mnemonic?: string): string {
  const wallet = ethers.Wallet.createRandom();
  let currentMnemonic = mnemonic ? mnemonic : wallet.mnemonic.phrase;
  
  console.log(`calculating address for seed : ${currentMnemonic}`);
  const starkKeyPair = getStarkPair(currentMnemonic, 0);
  let starkKeyPub = ec.getStarkKey(starkKeyPair);
  return hash.calculateContractAddressFromHash(starkKeyPub, ACC_CLASS_HASH, [starkKeyPub], 0);
}

а затем я развертываю его с помощью

      export async function deployAcc(mnemonic: string, address: string) {
  console.log(`generating keypair from mnemonic`);
  const starkKeyPair = getStarkPair(mnemonic, 0);
  console.log(`generation succesful`);
  const starkKeyPub = ec.getStarkKey(starkKeyPair);
  let futureAcc = new Account(provider, address, starkKeyPair);
  const accountResponse = await futureAcc?.deployAccount({
    classHash: ACC_CLASS_HASH,
    constructorCalldata: [starkKeyPub],
    addressSalt: starkKeyPub,
    contractAddress: address
  });
  console.log(`tx hash : ${accountResponse?.transaction_hash}`);
  await provider.waitForTransaction(accountResponse?.transaction_hash);
}

когда я пытаюсь развернуть учетную запись, я продолжаю получать

      Entry point 0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895 not found in contract with class hash 0x750cd490a7cd1572411169eaa8be292325990d33c5d4733655fe6b926985062.

дальнейший поиск точки входа 0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895 привел меня к предположению, что точка входа предназначена для подтверждения вызова?

как указано здесь https://starknet.io/docs/hello_starknet/cli.html

Заранее спасибо за помощь

1 ответ

Я предполагаю, что вы спрашиваете об этом коде:https://github.com/amanusk/starknet-cli-wallet/blob/develop/scripts/deploy-prefunded.ts

Как вы правильно сказали, недостающая точка входа, которая отсутствует в контракте, — это .(Вы можете вычислить это :)

      from starkware.starknet.public.abi import (get_selector_from_name)

print(hex(get_selector_from_name("__validate_deploy__")))

Точка входа была введена в версии0.10.1, и его целью является проверка правильности развертывания учетной записи при первой инициализации новой учетной записи.

Текущая версия репозитория выше использует версию контрактов OZ.0.5.0. В этой версии еще не реализована точка входа__validate_deploy__, и поэтому вы получаете эту ошибку при попытке развернуть предварительно профинансированную учетную запись.

Это должно поддерживаться в следующей версии, которая сейчас находится в PR:https://github.com/OpenZeppelin/cairo-contracts/pull/503 .

Контракты в репо будут обновлены после публикации официального релиза.

Вы можете заглянуть в эту ветку:https://github.com/amanusk/starknet-cli-wallet/tree/validate-deploy

Другие вопросы по тегам