развертывание предварительно профинансированной учетной записи 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