Когда люди думают об умных контрактах, они склонны думать об Ethereum. Тем не менее, многие экосистемы строят или создают поддержку распределенных вычислений, которые позволяют интеллектуальные контракты. Хедера недавно объявила о своей поддержке Smart Contracts 2.0, которые позволят контрактам работать со всеми нативными затратами, безопасности и скоростями сети Hedera, которые довольно впечатляют.
Этот пост покажет вам, как развернуть интеллектуальный контракт в сети Hedera с Javascrip SDK. Сначала мы составим наш умный контракт в байтовый код. Затем мы будем хранить байт-код в службу файлов hedera, развернуть наш контакт и изменить переменную состояния нашего контракта.
Скомпилирование вашего умного контракта
Сначала вам нужно будет составить свой умный контракт в байто-код. Есть несколько разных способов сделать это, рекомендуем использовать ремикс Анкет Remix выведет файл, обычно называемый simple_storage.json
Анкет Если вы скопируете этот файл в свой IDE, вы сможете инициализировать его в JavaScript, как это: let ('./compiledsmartcontract.json')
Анкет
Хранение байтового кода в службе файлов hedera
Нам нужен FileID его байтового кода, хранящегося в службе файлов Hedera, для развертывания нашего контракта. Мы можем получить это, используя API FileCreateTransaction от Hedera JS SDK и пропустив его байтовый код.
const compiled = json['data']['bytecode']['object']; // Store Contact in file service. Different from eth. Transaction size is smaller on hedera for security const mycontract = await new FileCreateTransaction() .setContents(compiled) .setKeys([PrivateKey.fromString(myPrivateKey)]) // The default max fee of 1 HBAR is not enough to make a file ( starts around 1.1 HBAR ) .setMaxTransactionFee(new Hbar(2)) // 2 HBAR .execute(client); const TransactionReceipt = await mycontract.getReceipt(client); const fileid = new FileId(TransactionReceipt.fileId); console.log("file ID: " + fileid);
После этого мы можем получить FileID от квитанции FileCreateTransaction, как показано в примере выше.
Развертывание
После того, как у вас есть FileID байтового кода из вашего контракта, вы можете передать FileID из предыдущего шага к вызову API ContractCreateTrancection ().
// Deploy Contract const deploy = await new ContractCreateTransaction() .setGas(300) .setBytecodeFileId(fileid) .execute(client); const receipt = await deploy.getReceipt(client); //Get the new contract const newContractId = receipt.contractId; console.log("The contract ID is " + newContractId);
После развертывания контракта вы можете дождаться квитанции, чтобы получить идентификатор контракта.
Вызов функций смарт -контракта
При вызове функций Smart Contract вы должны знать, изменяет ли функция, которую вы хотите позвонить, изменяет переменные состояния контракта. Если вы меняете переменные состояния, вы будете использовать ContractExeCuteTransaction ()
конечная точка. В противном случае вы будете использовать ContractCallQuery ()
конечная точка. Вы можете подумать об этом, что чтение читает против пишет.
Изменение состояния (пишет)
Например, я вызываю функцию SET в контракте, изложенном в Solidity Документация , Я изменяю stordeddata
состояние переменной.
Использование Hedera API для названия этой функции будет выглядеть примерно так.
const setter = await new ContractExecuteTransaction() .setContractId(newContractId) .setGas(400000) .setFunction("set", new ContractFunctionParameters().addUint256(7)) .setMaxTransactionFee(new Hbar(3)) const contractCallResult = await setter.execute(client); const testing = await contractCallResult.getRecord(client); console.log("Status Code:", testing.status)
Не изменяет состояние (читает)
Призыв к соответствующему Getter будет выглядеть примерно так
const getter = await new ContractCallQuery() // .setContractId(newContractId) .setFunction("get") .setGas(300000) .setMaxQueryPayment(new Hbar(1)) // defaults to 1, if requires more than one need change // set should be around at least 3-5k gas const contractGetter = await getter.execute(client); const message = await contractGetter.getUint256(0); console.log("contract message: " + message);
Оригинал: “https://dev.to/0xjepsen/how-to-deploy-cost-effective-smart-contracts-3a3l”