PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/sdk-coin-vet/dist/src/lib/transaction

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

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NFTTransaction = void 0;
const assert_1 = __importDefault(require("assert"));
const sdk_core_1 = require("@vechain/sdk-core");
const sdk_core_2 = require("@bitgo/sdk-core");
const utils_1 = __importDefault(require("../utils"));
const transaction_1 = require("./transaction");
class NFTTransaction extends transaction_1.Transaction {
    constructor(_coinConfig) {
        super(_coinConfig);
        this._type = sdk_core_2.TransactionType.SendNFT;
    }
    get nftCollectionId() {
        return this._nftCollectionId;
    }
    set nftCollectionId(nftCollectionId) {
        this._nftCollectionId = nftCollectionId;
    }
    get tokenId() {
        return this._tokenId;
    }
    set tokenId(tokenId) {
        this._tokenId = tokenId;
    }
    buildClauses() {
        if (!this.nftCollectionId) {
            throw new Error('NFT collection id is not set');
        }
        if (!this.sender) {
            throw new Error('Sender address is not set');
        }
        if (!this.tokenId) {
            throw new Error('Token id is not set');
        }
        this.clauses = this.recipients.map((recipient) => {
            const data = utils_1.default.getTransferNFTData(this.sender, recipient.address, this.tokenId);
            return {
                to: this.nftCollectionId,
                value: '0x0',
                data,
            };
        });
    }
    toJson() {
        const json = {
            id: this.id,
            chainTag: this.chainTag,
            blockRef: this.blockRef,
            expiration: this.expiration,
            recipients: this.recipients,
            gasPriceCoef: this.gasPriceCoef,
            gas: this.gas,
            dependsOn: this.dependsOn,
            nonce: this.nonce,
            sender: this.sender,
            feePayer: this.feePayerAddress,
            nftCollectionId: this.nftCollectionId,
            tokenId: this.tokenId,
        };
        return json;
    }
    fromDeserializedSignedTransaction(signedTx) {
        try {
            if (!signedTx || !signedTx.body) {
                throw new sdk_core_2.InvalidTransactionError('Invalid transaction: missing transaction body');
            }
            // Store the raw transaction
            this.rawTransaction = signedTx;
            // Set transaction body properties
            const body = signedTx.body;
            this.chainTag = body.chainTag;
            this.blockRef = body.blockRef;
            this.expiration = body.expiration;
            this.clauses = body.clauses;
            this.gasPriceCoef = typeof body.gasPriceCoef === 'number' ? body.gasPriceCoef : 128;
            this.gas = Number(body.gas);
            this.dependsOn = body.dependsOn;
            this.nonce = String(body.nonce);
            // Set recipients from clauses
            (0, assert_1.default)(body.clauses[0].to, 'nft collection id(contract address) address not found in the clauses');
            (0, assert_1.default)(body.clauses.length === 1, 'NFT transaction should have exactly one clause');
            this.nftCollectionId = body.clauses[0].to;
            const decodedData = utils_1.default.decodeTransferNFTData(body.clauses[0].data);
            this.recipients = decodedData.recipients;
            this.tokenId = decodedData.tokenId;
            this.sender = decodedData.sender;
            this.loadInputsAndOutputs();
            // Set signatures if present
            if (signedTx.signature) {
                // First signature is sender's signature
                this.senderSignature = Buffer.from(signedTx.signature.slice(0, sdk_core_1.Secp256k1.SIGNATURE_LENGTH));
                // If there's additional signature data, it's the fee payer's signature
                if (signedTx.signature.length > sdk_core_1.Secp256k1.SIGNATURE_LENGTH) {
                    this.feePayerSignature = Buffer.from(signedTx.signature.slice(sdk_core_1.Secp256k1.SIGNATURE_LENGTH));
                }
            }
        }
        catch (e) {
            throw new sdk_core_2.InvalidTransactionError(`Failed to deserialize transaction: ${e.message}`);
        }
    }
}
exports.NFTTransaction = NFTTransaction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmZ0VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL25mdFRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnREFBNkU7QUFFN0UsOENBQTJFO0FBQzNFLHFEQUE2QjtBQUU3QiwrQ0FBNEM7QUFFNUMsTUFBYSxjQUFlLFNBQVEseUJBQVc7SUFJN0MsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGVBQWUsQ0FBQyxlQUF1QjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7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QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsNEJBQTRCO1lBQzVCLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN2Qix3Q0FBd0M7Z0JBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsb0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBRTVGLHVFQUF1RTtnQkFDdkUsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxvQkFBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLG9CQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUM3RixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHNDQUFzQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBL0dELHdDQStHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IFNlY3AyNTZrMSwgVHJhbnNhY3Rpb24gYXMgVmV0VHJhbnNhY3Rpb24gfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgVmV0VHJhbnNhY3Rpb25EYXRhIH0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIE5GVFRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF9uZnRDb2xsZWN0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdG9rZW5JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmRORlQ7XG4gIH1cblxuICBnZXQgbmZ0Q29sbGVjdGlvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25mdENvbGxlY3Rpb25JZDtcbiAgfVxuXG4gIHNldCBuZnRDb2xsZWN0aW9uSWQobmZ0Q29sbGVjdGlvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uZnRDb2xsZWN0aW9uSWQgPSBuZnRDb2xsZWN0aW9uSWQ7XG4gIH1cblxuICBnZXQgdG9rZW5JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90b2tlbklkO1xuICB9XG5cbiAgc2V0IHRva2VuSWQodG9rZW5JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fdG9rZW5JZCA9IHRva2VuSWQ7XG4gIH1cblxuICBidWlsZENsYXVzZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5mdENvbGxlY3Rpb25JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdORlQgY29sbGVjdGlvbiBpZCBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZW5kZXIgYWRkcmVzcyBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRva2VuSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVG9rZW4gaWQgaXMgbm90IHNldCcpO1xuICAgIH1cblxuICAgIHRoaXMuY2xhdXNlcyA9IHRoaXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHV0aWxzLmdldFRyYW5zZmVyTkZURGF0YSh0aGlzLnNlbmRlciwgcmVjaXBpZW50LmFkZHJlc3MsIHRoaXMudG9rZW5JZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0bzogdGhpcy5uZnRDb2xsZWN0aW9uSWQsXG4gICAgICAgIHZhbHVlOiAnMHgwJyxcbiAgICAgICAgZGF0YSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICB0b0pzb24oKTogVmV0VHJhbnNhY3Rpb25EYXRhIHtcbiAgICBjb25zdCBqc29uOiBWZXRUcmFuc2FjdGlvbkRhdGEgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGNoYWluVGFnOiB0aGlzLmNoYWluVGFnLFxuICAgICAgYmxvY2tSZWY6IHRoaXMuYmxvY2tSZWYsXG4gICAgICBleHBpcmF0aW9uOiB0aGlzLmV4cGlyYXRpb24sXG4gICAgICByZWNpcGllbnRzOiB0aGlzLnJlY2lwaWVudHMsXG4gICAgICBnYXNQcmljZUNvZWY6IHRoaXMuZ2FzUHJpY2VDb2VmLFxuICAgICAgZ2FzOiB0aGlzLmdhcyxcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5kZXBlbmRzT24sXG4gICAgICBub25jZTogdGhpcy5ub25jZSxcbiAgICAgIHNlbmRlcjogdGhpcy5zZW5kZXIsXG4gICAgICBmZWVQYXllcjogdGhpcy5mZWVQYXllckFkZHJlc3MsXG4gICAgICBuZnRDb2xsZWN0aW9uSWQ6IHRoaXMubmZ0Q29sbGVjdGlvbklkLFxuICAgICAgdG9rZW5JZDogdGhpcy50b2tlbklkLFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIGZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeDogVmV0VHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFzaWduZWRUeCB8fCAhc2lnbmVkVHguYm9keSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgdHJhbnNhY3Rpb24gYm9keScpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSB0aGUgcmF3IHRyYW5zYWN0aW9uXG4gICAgICB0aGlzLnJhd1RyYW5zYWN0aW9uID0gc2lnbmVkVHg7XG5cbiAgICAgIC8vIFNldCB0cmFuc2FjdGlvbiBib2R5IHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IGJvZHkgPSBzaWduZWRUeC5ib2R5O1xuICAgICAgdGhpcy5jaGFpblRhZyA9IGJvZHkuY2hhaW5UYWc7XG4gICAgICB0aGlzLmJsb2NrUmVmID0gYm9keS5ibG9ja1JlZjtcbiAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IGJvZHkuZXhwaXJhdGlvbjtcbiAgICAgIHRoaXMuY2xhdXNlcyA9IGJvZHkuY2xhdXNlcztcbiAgICAgIHRoaXMuZ2FzUHJpY2VDb2VmID0gdHlwZW9mIGJvZHkuZ2FzUHJpY2VDb2VmID09PSAnbnVtYmVyJyA/IGJvZHkuZ2FzUHJpY2VDb2VmIDogMTI4O1xuICAgICAgdGhpcy5nYXMgPSBOdW1iZXIoYm9keS5nYXMpO1xuICAgICAgdGhpcy5kZXBlbmRzT24gPSBib2R5LmRlcGVuZHNPbjtcbiAgICAgIHRoaXMubm9uY2UgPSBTdHJpbmcoYm9keS5ub25jZSk7XG4gICAgICAvLyBTZXQgcmVjaXBpZW50cyBmcm9tIGNsYXVzZXNcbiAgICAgIGFzc2VydChib2R5LmNsYXVzZXNbMF0udG8sICduZnQgY29sbGVjdGlvbiBpZChjb250cmFjdCBhZGRyZXNzKSBhZGRyZXNzIG5vdCBmb3VuZCBpbiB0aGUgY2xhdXNlcycpO1xuICAgICAgYXNzZXJ0KGJvZHkuY2xhdXNlcy5sZW5ndGggPT09IDEsICdORlQgdHJhbnNhY3Rpb24gc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgY2xhdXNlJyk7XG4gICAgICB0aGlzLm5mdENvbGxlY3Rpb25JZCA9IGJvZHkuY2xhdXNlc1swXS50bztcbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gdXRpbHMuZGVjb2RlVHJhbnNmZXJORlREYXRhKGJvZHkuY2xhdXNlc1swXS5kYXRhKTtcbiAgICAgIHRoaXMucmVjaXBpZW50cyA9IGRlY29kZWREYXRhLnJlY2lwaWVudHM7XG4gICAgICB0aGlzLnRva2VuSWQgPSBkZWNvZGVkRGF0YS50b2tlbklkO1xuICAgICAgdGhpcy5zZW5kZXIgPSBkZWNvZGVkRGF0YS5zZW5kZXI7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG5cbiAgICAgIC8vIFNldCBzaWduYXR1cmVzIGlmIHByZXNlbnRcbiAgICAgIGlmIChzaWduZWRUeC5zaWduYXR1cmUpIHtcbiAgICAgICAgLy8gRmlyc3Qgc2lnbmF0dXJlIGlzIHNlbmRlcidzIHNpZ25hdHVyZVxuICAgICAgICB0aGlzLnNlbmRlclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNpZ25lZFR4LnNpZ25hdHVyZS5zbGljZSgwLCBTZWNwMjU2azEuU0lHTkFUVVJFX0xFTkdUSCkpO1xuXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYWRkaXRpb25hbCBzaWduYXR1cmUgZGF0YSwgaXQncyB0aGUgZmVlIHBheWVyJ3Mgc2lnbmF0dXJlXG4gICAgICAgIGlmIChzaWduZWRUeC5zaWduYXR1cmUubGVuZ3RoID4gU2VjcDI1NmsxLlNJR05BVFVSRV9MRU5HVEgpIHtcbiAgICAgICAgICB0aGlzLmZlZVBheWVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20oc2lnbmVkVHguc2lnbmF0dXJlLnNsaWNlKFNlY3AyNTZrMS5TSUdOQVRVUkVfTEVOR1RIKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEZhaWxlZCB0byBkZXNlcmlhbGl6ZSB0cmFuc2FjdGlvbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=

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


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