PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-tao/dist/src/lib

Просмотр файла: stakingBuilder.js

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.StakingBuilder = void 0;
const txwrapper_core_1 = require("@substrate/txwrapper-core");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const sdk_core_1 = require("@bitgo/sdk-core");
const abstract_substrate_1 = require("@bitgo/abstract-substrate");
class StakingBuilder extends abstract_substrate_1.TransactionBuilder {
    constructor(_coinConfig) {
        super(_coinConfig);
    }
    /**
     * Construct a transaction to stake
     * @returns {UnsignedTransaction} an unsigned stake TAO transaction
     *
     * @see https://polkadot.js.org/docs/substrate/extrinsics/#staking
     */
    buildTransaction() {
        const baseTxInfo = this.createBaseTxInfo();
        return this.addStake({
            amountStaked: this._amount,
            hotkey: this._hotkey,
            netuid: this._netuid,
        }, baseTxInfo);
    }
    /** @inheritdoc */
    get transactionType() {
        return sdk_core_1.TransactionType.StakingActivate;
    }
    /**
     * Set the amount to stake
     * @param {string} amount to stake
     * @returns {StakingBuilder} This staking builder.
     *
     * @see https://wiki.polkadot.network/docs/learn-nominator#required-minimum-stake
     */
    amount(amount) {
        this.validateValue(new bignumber_js_1.default(amount));
        this._amount = amount;
        return this;
    }
    /**
     * Set the validator hot key address
     * @param {string} hotkey address of validator
     * @returns {StakingBuilder} This staking builder.
     *
     * @see https://wiki.polkadot.network/docs/learn-staking#accounts
     */
    hotkey({ address }) {
        this.validateAddress({ address });
        this._hotkey = address;
        return this;
    }
    /**
     * Set netuid of the subnet (root network is 0)
     * @param {string} netuid of subnet
     * @returns {StakingBuilder} This staking builder.
     */
    netuid(netuid) {
        this._netuid = netuid;
        return this;
    }
    /** @inheritdoc */
    fromImplementation(rawTransaction) {
        const tx = super.fromImplementation(rawTransaction);
        if (this._method?.name === abstract_substrate_1.Interface.MethodNames.AddStake) {
            const txMethod = this._method.args;
            this.amount(txMethod.amountStaked);
            this.hotkey({ address: txMethod.hotkey });
            this.netuid(txMethod.netuid);
        }
        else {
            throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected addStake`);
        }
        return tx;
    }
    /** @inheritdoc */
    validateTransaction(_) {
        super.validateTransaction(_);
        this.validateFields(this._amount, this._hotkey, this._netuid);
    }
    /**
     * Helper method to validate whether stake params have the correct type and format
     * @param {string} amountStaked amount to stake
     * @param {string} hotkey hotkey address of the validator
     * @param {string} netuid netuid of the subnet
     */
    validateFields(amountStaked, hotkey, netuid) {
        const validationResult = abstract_substrate_1.Schema.StakeTransactionSchema.validate({
            amountStaked,
            hotkey,
            netuid,
        });
        if (validationResult.error) {
            throw new sdk_core_1.InvalidTransactionError(`Stake Builder Transaction validation failed: ${validationResult.error.message}`);
        }
    }
    /** @inheritdoc */
    validateDecodedTransaction(decodedTxn, rawTransaction) {
        if (decodedTxn.method?.name === abstract_substrate_1.Interface.MethodNames.AddStake) {
            const txMethod = decodedTxn.method.args;
            const amountStaked = txMethod.amountStaked;
            const hotkey = txMethod.hotkey;
            const netuid = txMethod.netuid;
            const validationResult = abstract_substrate_1.Schema.StakeTransactionSchema.validate({ amountStaked, hotkey, netuid });
            if (validationResult.error) {
                throw new sdk_core_1.InvalidTransactionError(`Transfer Transaction validation failed: ${validationResult.error.message}`);
            }
        }
    }
    /**
     * Construct a transaction to stake
     *
     * @param {Interface.AddStakeArgs} Stake arguments to be passed to the addStake method
     * @param {Interface.CreateBaseTxInfo} Base txn info required to construct the addStake txn
     * @returns {UnsignedTransaction} an unsigned stake TAO transaction
     */
    addStake(args, info) {
        return (0, txwrapper_core_1.defineMethod)({
            method: {
                args,
                name: 'addStake',
                pallet: 'subtensorModule',
            },
            ...info.baseTxInfo,
        }, info.options);
    }
}
exports.StakingBuilder = StakingBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3N0YWtpbmdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDhEQUFzSDtBQUN0SCxnRUFBcUM7QUFDckMsOENBQXdGO0FBQ3hGLGtFQUErRjtBQUUvRixNQUFhLGNBQWUsU0FBUSx1Q0FBa0I7SUFLcEQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sZ0JBQWdCO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FDbEI7WUFDRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztTQUNyQixFQUNELFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQWU7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDZCxD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aUI7YUFDMUI7WUFDRCxHQUFHLElBQUksQ0FBQyxVQUFVO1NBQ25CLEVBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBOUlELHdDQThJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBkZWZpbmVNZXRob2QsIFVuc2lnbmVkVHJhbnNhY3Rpb24sIERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlLCBCYXNlQWRkcmVzcyB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25CdWlsZGVyLCBJbnRlcmZhY2UsIFNjaGVtYSB9IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1zdWJzdHJhdGUnO1xuXG5leHBvcnQgY2xhc3MgU3Rha2luZ0J1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX2Ftb3VudDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2hvdGtleTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX25ldHVpZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSB0cmFuc2FjdGlvbiB0byBzdGFrZVxuICAgKiBAcmV0dXJucyB7VW5zaWduZWRUcmFuc2FjdGlvbn0gYW4gdW5zaWduZWQgc3Rha2UgVEFPIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9wb2xrYWRvdC5qcy5vcmcvZG9jcy9zdWJzdHJhdGUvZXh0cmluc2ljcy8jc3Rha2luZ1xuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIHJldHVybiB0aGlzLmFkZFN0YWtlKFxuICAgICAge1xuICAgICAgICBhbW91bnRTdGFrZWQ6IHRoaXMuX2Ftb3VudCxcbiAgICAgICAgaG90a2V5OiB0aGlzLl9ob3RrZXksXG4gICAgICAgIG5ldHVpZDogdGhpcy5fbmV0dWlkLFxuICAgICAgfSxcbiAgICAgIGJhc2VUeEluZm9cbiAgICApO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBhbW91bnQgdG8gc3Rha2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFtb3VudCB0byBzdGFrZVxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IFRoaXMgc3Rha2luZyBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvbGVhcm4tbm9taW5hdG9yI3JlcXVpcmVkLW1pbmltdW0tc3Rha2VcbiAgICovXG4gIGFtb3VudChhbW91bnQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGFtb3VudCkpO1xuICAgIHRoaXMuX2Ftb3VudCA9IGFtb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbGlkYXRvciBob3Qga2V5IGFkZHJlc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvdGtleSBhZGRyZXNzIG9mIHZhbGlkYXRvclxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IFRoaXMgc3Rha2luZyBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvbGVhcm4tc3Rha2luZyNhY2NvdW50c1xuICAgKi9cbiAgaG90a2V5KHsgYWRkcmVzcyB9OiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLl9ob3RrZXkgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXR1aWQgb2YgdGhlIHN1Ym5ldCAocm9vdCBuZXR3b3JrIGlzIDApXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXR1aWQgb2Ygc3VibmV0XG4gICAqIEByZXR1cm5zIHtTdGFraW5nQnVpbGRlcn0gVGhpcyBzdGFraW5nIGJ1aWxkZXIuXG4gICAqL1xuICBuZXR1aWQobmV0dWlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9uZXR1aWQgPSBuZXR1aWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gc3VwZXIuZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBpZiAodGhpcy5fbWV0aG9kPy5uYW1lID09PSBJbnRlcmZhY2UuTWV0aG9kTmFtZXMuQWRkU3Rha2UpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgSW50ZXJmYWNlLkFkZFN0YWtlQXJncztcbiAgICAgIHRoaXMuYW1vdW50KHR4TWV0aG9kLmFtb3VudFN0YWtlZCk7XG4gICAgICB0aGlzLmhvdGtleSh7IGFkZHJlc3M6IHR4TWV0aG9kLmhvdGtleSB9KTtcbiAgICAgIHRoaXMubmV0dWlkKHR4TWV0aG9kLm5ldHVpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiAke3RoaXMuX21ldGhvZD8ubmFtZX0uIEV4cGVjdGVkIGFkZFN0YWtlYCk7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKF86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGVUcmFuc2FjdGlvbihfKTtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRzKHRoaXMuX2Ftb3VudCwgdGhpcy5faG90a2V5LCB0aGlzLl9uZXR1aWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gdmFsaWRhdGUgd2hldGhlciBzdGFrZSBwYXJhbXMgaGF2ZSB0aGUgY29ycmVjdCB0eXBlIGFuZCBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFtb3VudFN0YWtlZCBhbW91bnQgdG8gc3Rha2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvdGtleSBob3RrZXkgYWRkcmVzcyBvZiB0aGUgdmFsaWRhdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXR1aWQgbmV0dWlkIG9mIHRoZSBzdWJuZXRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVGaWVsZHMoYW1vdW50U3Rha2VkOiBzdHJpbmcsIGhvdGtleTogc3RyaW5nLCBuZXR1aWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBTY2hlbWEuU3Rha2VUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICBhbW91bnRTdGFrZWQsXG4gICAgICBob3RrZXksXG4gICAgICBuZXR1aWQsXG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgU3Rha2UgQnVpbGRlciBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4LCByYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBJbnRlcmZhY2UuTWV0aG9kTmFtZXMuQWRkU3Rha2UpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyB1bmtub3duIGFzIEludGVyZmFjZS5BZGRTdGFrZUFyZ3M7XG4gICAgICBjb25zdCBhbW91bnRTdGFrZWQgPSB0eE1ldGhvZC5hbW91bnRTdGFrZWQ7XG4gICAgICBjb25zdCBob3RrZXkgPSB0eE1ldGhvZC5ob3RrZXk7XG4gICAgICBjb25zdCBuZXR1aWQgPSB0eE1ldGhvZC5uZXR1aWQ7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gU2NoZW1hLlN0YWtlVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoeyBhbW91bnRTdGFrZWQsIGhvdGtleSwgbmV0dWlkIH0pO1xuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2ZlciBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIHRyYW5zYWN0aW9uIHRvIHN0YWtlXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZXJmYWNlLkFkZFN0YWtlQXJnc30gU3Rha2UgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgYWRkU3Rha2UgbWV0aG9kXG4gICAqIEBwYXJhbSB7SW50ZXJmYWNlLkNyZWF0ZUJhc2VUeEluZm99IEJhc2UgdHhuIGluZm8gcmVxdWlyZWQgdG8gY29uc3RydWN0IHRoZSBhZGRTdGFrZSB0eG5cbiAgICogQHJldHVybnMge1Vuc2lnbmVkVHJhbnNhY3Rpb259IGFuIHVuc2lnbmVkIHN0YWtlIFRBTyB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhZGRTdGFrZShhcmdzOiBJbnRlcmZhY2UuQWRkU3Rha2VBcmdzLCBpbmZvOiBJbnRlcmZhY2UuQ3JlYXRlQmFzZVR4SW5mbyk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiBkZWZpbmVNZXRob2QoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDoge1xuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgbmFtZTogJ2FkZFN0YWtlJyxcbiAgICAgICAgICBwYWxsZXQ6ICdzdWJ0ZW5zb3JNb2R1bGUnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5pbmZvLmJhc2VUeEluZm8sXG4gICAgICB9LFxuICAgICAgaW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxufVxuIl19

Выполнить команду


Для локальной разработки. Не используйте в интернете!