UNPKG

@hiero-ledger/sdk

Version:
560 lines (507 loc) 17.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _Hbar = _interopRequireDefault(require("../Hbar.cjs")); var _AccountId = _interopRequireDefault(require("../account/AccountId.cjs")); var _FileId = _interopRequireDefault(require("../file/FileId.cjs")); var _ContractFunctionParameters = _interopRequireDefault(require("./ContractFunctionParameters.cjs")); var _Transaction = _interopRequireWildcard(require("../transaction/Transaction.cjs")); var _long = _interopRequireDefault(require("long")); var _Duration = _interopRequireDefault(require("../Duration.cjs")); var _Key = _interopRequireDefault(require("../Key.cjs")); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } // SPDX-License-Identifier: Apache-2.0 /** * @namespace proto * @typedef {import("@hashgraph/proto").proto.ITransaction} HieroProto.proto.ITransaction * @typedef {import("@hashgraph/proto").proto.ISignedTransaction} HieroProto.proto.ISignedTransaction * @typedef {import("@hashgraph/proto").proto.TransactionBody} HieroProto.proto.TransactionBody * @typedef {import("@hashgraph/proto").proto.ITransactionBody} HieroProto.proto.ITransactionBody * @typedef {import("@hashgraph/proto").proto.ITransactionResponse} HieroProto.proto.ITransactionResponse * @typedef {import("@hashgraph/proto").proto.IContractCreateTransactionBody} HieroProto.proto.IContractCreateTransactionBody * @typedef {import("@hashgraph/proto").proto.IAccountID} HieroProto.proto.IAccountID * @typedef {import("@hashgraph/proto").proto.IFileID} HieroProto.proto.IFileID */ /** * @typedef {import("bignumber.js").default} BigNumber * @typedef {import("../channel/Channel.js").default} Channel * @typedef {import("../client/Client.js").default<*, *>} Client * @typedef {import("../transaction/TransactionId.js").default} TransactionId */ /** * Create a new smart contract. * * If this transaction succeeds, the `ContractID` for the new smart contract * SHALL be set in the transaction receipt.<br/> * The contract is defined by the initial bytecode (or `initcode`). The * `initcode` SHALL be stored either in a previously created file, or in the * transaction body itself for very small contracts. * * As part of contract creation, the constructor defined for the new smart * contract SHALL run with the parameters provided in the * `constructorParameters` field.<br/> * The gas to "power" that constructor MUST be provided via the `gas` field, * and SHALL be charged to the payer for this transaction.<br/> * If the contract _constructor_ stores information, it is charged gas for that * storage. There is a separate fee in HBAR to maintain that storage until the * expiration, and that fee SHALL be added to this transaction as part of the * _transaction fee_, rather than gas. * */ class ContractCreateTransaction extends _Transaction.default { /** * @param {object} [props] * @param {FileId | string} [props.bytecodeFileId] * @param {Uint8Array} [props.bytecode] * @param {Key} [props.adminKey] * @param {number | Long} [props.gas] * @param {number | string | Long | BigNumber | Hbar} [props.initialBalance] * @param {AccountId | string} [props.proxyAccountId] * @param {Duration | Long | number} [props.autoRenewPeriod] * @param {Uint8Array} [props.constructorParameters] * @param {string} [props.contractMemo] * @param {number} [props.maxAutomaticTokenAssociations] * @param {AccountId | string} [props.stakedAccountId] * @param {Long | number} [props.stakedNodeId] * @param {boolean} [props.declineStakingReward] * @param {AccountId} [props.autoRenewAccountId] */ constructor(props = {}) { super(); /** * @private * @type {?FileId} */ this._bytecodeFileId = null; /** * @private * @type {?Uint8Array} */ this._bytecode = null; /** * @private * @type {?Key} */ this._adminKey = null; /** * @private * @type {?Long} */ this._gas = null; /** * @private * @type {?Hbar} */ this._initialBalance = null; /** * @private * @type {?AccountId} */ this._proxyAccountId = null; /** * @private * @type {Duration} */ this._autoRenewPeriod = new _Duration.default(_Transaction.DEFAULT_AUTO_RENEW_PERIOD); /** * @private * @type {?Uint8Array} */ this._constructorParameters = null; /** * @private * @type {?string} */ this._contractMemo = null; /** * @private * @type {?number} */ this._maxAutomaticTokenAssociations = null; this._defaultMaxTransactionFee = new _Hbar.default(20); /** * @private * @type {?AccountId} */ this._stakedAccountId = null; /** * @private * @type {?Long} */ this._stakedNodeId = null; /** * @private * @type {boolean} */ this._declineStakingReward = false; /** * @type {?AccountId} */ this._autoRenewAccountId = null; if (props.bytecodeFileId != null) { this.setBytecodeFileId(props.bytecodeFileId); } if (props.bytecode != null) { this.setBytecode(props.bytecode); } if (props.adminKey != null) { this.setAdminKey(props.adminKey); } if (props.gas != null) { this.setGas(props.gas); } if (props.initialBalance != null) { this.setInitialBalance(props.initialBalance); } if (props.proxyAccountId != null) { // eslint-disable-next-line deprecation/deprecation this.setProxyAccountId(props.proxyAccountId); } if (props.autoRenewPeriod != null) { this.setAutoRenewPeriod(props.autoRenewPeriod); } if (props.constructorParameters != null) { this.setConstructorParameters(props.constructorParameters); } if (props.contractMemo != null) { this.setContractMemo(props.contractMemo); } if (props.maxAutomaticTokenAssociations != null) { this.setMaxAutomaticTokenAssociations(props.maxAutomaticTokenAssociations); } if (props.stakedAccountId != null) { this.setStakedAccountId(props.stakedAccountId); } if (props.stakedNodeId != null) { this.setStakedNodeId(props.stakedNodeId); } if (props.declineStakingReward != null) { this.setDeclineStakingReward(props.declineStakingReward); } if (props.autoRenewAccountId != null) { this.setAutoRenewAccountId(props.autoRenewAccountId); } } /** * @internal * @param {HieroProto.proto.ITransaction[]} transactions * @param {HieroProto.proto.ISignedTransaction[]} signedTransactions * @param {TransactionId[]} transactionIds * @param {AccountId[]} nodeIds * @param {HieroProto.proto.ITransactionBody[]} bodies * @returns {ContractCreateTransaction} */ static _fromProtobuf(transactions, signedTransactions, transactionIds, nodeIds, bodies) { const body = bodies[0]; const create = /** @type {HieroProto.proto.IContractCreateTransactionBody} */ body.contractCreateInstance; return _Transaction.default._fromProtobufTransactions(new ContractCreateTransaction({ bytecodeFileId: create.fileID != null ? _FileId.default._fromProtobuf(/** @type {HieroProto.proto.IFileID} */ create.fileID) : undefined, adminKey: create.adminKey != null ? _Key.default._fromProtobufKey(create.adminKey) : undefined, gas: create.gas != null ? create.gas : undefined, initialBalance: create.initialBalance != null ? _Hbar.default.fromTinybars(create.initialBalance) : undefined, proxyAccountId: create.proxyAccountID != null ? _AccountId.default._fromProtobuf(/** @type {HieroProto.proto.IAccountID} */ create.proxyAccountID) : undefined, autoRenewPeriod: create.autoRenewPeriod != null ? create.autoRenewPeriod.seconds != null ? create.autoRenewPeriod.seconds : undefined : undefined, constructorParameters: create.constructorParameters != null ? create.constructorParameters : undefined, contractMemo: create.memo != null ? create.memo : undefined, maxAutomaticTokenAssociations: create.maxAutomaticTokenAssociations != null ? create.maxAutomaticTokenAssociations : undefined, stakedAccountId: create.stakedAccountId != null ? _AccountId.default._fromProtobuf(create.stakedAccountId) : undefined, stakedNodeId: create.stakedNodeId != null ? create.stakedNodeId : undefined, declineStakingReward: create.declineReward == true, autoRenewAccountId: create.autoRenewAccountId != null ? _AccountId.default._fromProtobuf(create.autoRenewAccountId) : undefined }), transactions, signedTransactions, transactionIds, nodeIds, bodies); } /** * @returns {?FileId} */ get bytecodeFileId() { return this._bytecodeFileId; } /** * @param {FileId | string} bytecodeFileId * @returns {this} */ setBytecodeFileId(bytecodeFileId) { this._requireNotFrozen(); this._bytecodeFileId = typeof bytecodeFileId === "string" ? _FileId.default.fromString(bytecodeFileId) : bytecodeFileId.clone(); this._bytecode = null; return this; } /** * @returns {?Uint8Array} */ get bytecode() { return this._bytecode; } /** * @param {Uint8Array} bytecode * @returns {this} */ setBytecode(bytecode) { this._requireNotFrozen(); this._bytecode = bytecode; this._bytecodeFileId = null; return this; } /** * @returns {?Key} */ get adminKey() { return this._adminKey; } /** * @param {Key} adminKey * @returns {this} */ setAdminKey(adminKey) { this._requireNotFrozen(); this._adminKey = adminKey; return this; } /** * @returns {?Long} */ get gas() { return this._gas; } /** * @param {number | Long} gas * @returns {this} */ setGas(gas) { this._requireNotFrozen(); this._gas = gas instanceof _long.default ? gas : _long.default.fromValue(gas); if (this._gas.lessThan(0)) { throw new Error("Gas cannot be negative number"); } return this; } /** * @returns {?Hbar} */ get initialBalance() { return this._initialBalance; } /** * Set the initial amount to transfer into this contract. * * @param {number | string | Long | BigNumber | Hbar} initialBalance * @returns {this} */ setInitialBalance(initialBalance) { this._requireNotFrozen(); this._initialBalance = initialBalance instanceof _Hbar.default ? initialBalance : new _Hbar.default(initialBalance); return this; } /** * @deprecated * @returns {?AccountId} */ get proxyAccountId() { return this._proxyAccountId; } /** * @deprecated * @param {AccountId | string} proxyAccountId * @returns {this} */ setProxyAccountId(proxyAccountId) { this._requireNotFrozen(); this._proxyAccountId = proxyAccountId instanceof _AccountId.default ? proxyAccountId : _AccountId.default.fromString(proxyAccountId); return this; } /** * @returns {Duration} */ get autoRenewPeriod() { return this._autoRenewPeriod; } /** * An account to charge for auto-renewal of this contract. If not set, or set to an * account with zero hbar balance, the contract's own hbar balance will be used to * cover auto-renewal fees. * * @param {Duration | Long | number} autoRenewPeriod * @returns {this} */ setAutoRenewPeriod(autoRenewPeriod) { this._requireNotFrozen(); this._autoRenewPeriod = autoRenewPeriod instanceof _Duration.default ? autoRenewPeriod : new _Duration.default(autoRenewPeriod); return this; } /** * @returns {?Uint8Array} */ get constructorParameters() { return this._constructorParameters; } /** * @param {Uint8Array | ContractFunctionParameters} constructorParameters * @returns {this} */ setConstructorParameters(constructorParameters) { this._requireNotFrozen(); this._constructorParameters = constructorParameters instanceof _ContractFunctionParameters.default ? constructorParameters._build() : constructorParameters; return this; } /** * @returns {?string} */ get contractMemo() { return this._contractMemo; } /** * @param {string} contractMemo * @returns {this} */ setContractMemo(contractMemo) { this._requireNotFrozen(); this._contractMemo = contractMemo; return this; } /** * @returns {?number} */ get maxAutomaticTokenAssociations() { return this._maxAutomaticTokenAssociations; } /** * @param {number} maxAutomaticTokenAssociations * @returns {this} */ setMaxAutomaticTokenAssociations(maxAutomaticTokenAssociations) { this._maxAutomaticTokenAssociations = maxAutomaticTokenAssociations; return this; } /** * @returns {?AccountId} */ get stakedAccountId() { return this._stakedAccountId; } /** * @param {AccountId | string} stakedAccountId * @returns {this} */ setStakedAccountId(stakedAccountId) { this._requireNotFrozen(); this._stakedAccountId = typeof stakedAccountId === "string" ? _AccountId.default.fromString(stakedAccountId) : stakedAccountId; this._stakedNodeId = null; return this; } /** * @returns {?Long} */ get stakedNodeId() { return this._stakedNodeId; } /** * @param {Long | number} stakedNodeId * @returns {this} */ setStakedNodeId(stakedNodeId) { this._requireNotFrozen(); this._stakedNodeId = _long.default.fromValue(stakedNodeId); this._stakedAccountId = null; return this; } /** * @returns {boolean} */ get declineStakingRewards() { return this._declineStakingReward; } /** * @param {boolean} declineStakingReward * @returns {this} */ setDeclineStakingReward(declineStakingReward) { this._requireNotFrozen(); this._declineStakingReward = declineStakingReward; return this; } /** * @returns {?AccountId} */ get autoRenewAccountId() { return this._autoRenewAccountId; } /** * @param {string | AccountId} autoRenewAccountId * @returns {this} */ setAutoRenewAccountId(autoRenewAccountId) { this._requireNotFrozen(); this._autoRenewAccountId = typeof autoRenewAccountId === "string" ? _AccountId.default.fromString(autoRenewAccountId) : autoRenewAccountId; return this; } /** * @param {Client} client */ _validateChecksums(client) { if (this._bytecodeFileId != null) { this._bytecodeFileId.validateChecksum(client); } if (this._proxyAccountId != null) { this._proxyAccountId.validateChecksum(client); } } /** * @override * @internal * @param {Channel} channel * @param {HieroProto.proto.ITransaction} request * @returns {Promise<HieroProto.proto.ITransactionResponse>} */ _execute(channel, request) { return channel.smartContract.createContract(request); } /** * @override * @protected * @returns {NonNullable<HieroProto.proto.TransactionBody["data"]>} */ _getTransactionDataCase() { return "contractCreateInstance"; } /** * @override * @protected * @returns {HieroProto.proto.IContractCreateTransactionBody} */ _makeTransactionData() { return { fileID: this._bytecodeFileId != null ? this._bytecodeFileId._toProtobuf() : null, initcode: this._bytecode, adminKey: this._adminKey != null ? this._adminKey._toProtobufKey() : null, gas: this._gas, initialBalance: this._initialBalance != null ? this._initialBalance.toTinybars() : null, proxyAccountID: this._proxyAccountId != null ? this._proxyAccountId._toProtobuf() : null, autoRenewPeriod: this._autoRenewPeriod._toProtobuf(), constructorParameters: this._constructorParameters, memo: this._contractMemo, maxAutomaticTokenAssociations: this._maxAutomaticTokenAssociations, stakedAccountId: this.stakedAccountId != null ? this.stakedAccountId._toProtobuf() : null, stakedNodeId: this.stakedNodeId, declineReward: this.declineStakingRewards, autoRenewAccountId: this._autoRenewAccountId != null ? this._autoRenewAccountId._toProtobuf() : null }; } /** * @returns {string} */ _getLogId() { const timestamp = /** @type {import("../Timestamp.js").default} */ this._transactionIds.current.validStart; return `ContractCreateTransaction:${timestamp.toString()}`; } } exports.default = ContractCreateTransaction; _Transaction.TRANSACTION_REGISTRY.set("contractCreateInstance", // eslint-disable-next-line @typescript-eslint/unbound-method ContractCreateTransaction._fromProtobuf);