PHP WebShell

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

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

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TransferBuilder = void 0;
const transactionBuilder_1 = require("./transactionBuilder");
const sdk_core_1 = require("@bitgo/sdk-core");
const unsignedTransactionBuilder_1 = require("./unsignedTransactionBuilder");
const iface_1 = require("./iface");
const assert_1 = __importDefault(require("assert"));
class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
    constructor(_coinConfig, utils) {
        super(_coinConfig);
        this._utils = utils;
    }
    /**
     * Initialize the transaction builder fields using the decoded transaction data
     *
     * @param {Transaction} tx the transaction data
     */
    initBuilder(tx) {
        super.initBuilder(tx);
    }
    /** @inheritdoc */
    async buildImplementation() {
        // The ICP chain sets a memo field with a default value of 0. This ensures compatibility
        // by setting the memo to 0 if it's not explicitly provided.
        if (!this._memo || this._memo === undefined || this._memo === null) {
            this._memo = iface_1.DEFAULT_MEMO;
        }
        this.validateTransaction(this._transaction);
        this.buildIcpTransactionData();
        const unsignedTransactionBuilder = new unsignedTransactionBuilder_1.UnsignedTransactionBuilder(this._transaction.icpTransaction);
        const payloadsData = await unsignedTransactionBuilder.getUnsignedTransaction();
        this._transaction.payloadsData = payloadsData;
        return this._transaction;
    }
    buildIcpTransactionData() {
        (0, assert_1.default)(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
        (0, assert_1.default)(this._publicKey, new sdk_core_1.BuildTransactionError('sender public key is required before building'));
        (0, assert_1.default)(this._amount, new sdk_core_1.BuildTransactionError('amount is required before building'));
        (0, assert_1.default)(this._receiverId, new sdk_core_1.BuildTransactionError('receiver is required before building'));
        const publicKey = {
            hex_bytes: this._publicKey,
            curve_type: iface_1.CurveType.SECP256K1,
        };
        const senderOperation = {
            type: iface_1.OperationType.TRANSACTION,
            account: { address: this._sender },
            amount: {
                value: `-${this._amount}`,
                currency: {
                    symbol: this._coinConfig.family,
                    decimals: this._coinConfig.decimalPlaces,
                },
            },
        };
        const receiverOperation = {
            type: iface_1.OperationType.TRANSACTION,
            account: { address: this._receiverId },
            amount: {
                value: this._amount,
                currency: {
                    symbol: this._coinConfig.family,
                    decimals: this._coinConfig.decimalPlaces,
                },
            },
        };
        const feeOperation = {
            type: iface_1.OperationType.FEE,
            account: { address: this._sender },
            amount: {
                value: this._utils.feeData(),
                currency: {
                    symbol: this._coinConfig.family,
                    decimals: this._coinConfig.decimalPlaces,
                },
            },
        };
        const createdTimestamp = this._transaction.createdTimestamp;
        const { metaData, ingressEndTime } = this._utils.getMetaData(this._memo, createdTimestamp, this._ingressEnd);
        const icpTransaction = {
            public_keys: [publicKey],
            operations: [senderOperation, receiverOperation, feeOperation],
            metadata: metaData,
        };
        const icpTransactionData = {
            senderAddress: this._sender,
            receiverAddress: this._receiverId,
            amount: this._amount,
            fee: this._utils.feeData(),
            senderPublicKeyHex: this._publicKey,
            transactionType: iface_1.OperationType.TRANSACTION,
            expiryTime: ingressEndTime,
            memo: this._memo,
        };
        this._transaction.icpTransactionData = icpTransactionData;
        this._transaction.icpTransaction = icpTransaction;
    }
    /** @inheritdoc */
    signImplementation(key) {
        const signatures = this._utils.getSignatures(this._transaction.payloadsData, this._publicKey, key.key);
        this._transaction.addSignature(signatures);
        return this._transaction;
    }
}
exports.TransferBuilder = TransferBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsNkRBQTBEO0FBQzFELDhDQUFrRjtBQUdsRiw2RUFBMEU7QUFDMUUsbUNBUWlCO0FBQ2pCLG9EQUE0QjtBQUU1QixNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBR3JELFlBQVksV0FBaUMsRUFBRSxLQUFZO1FBQ3pELEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsd0ZBQXdGO1FBQ3hGLDREQUE0RDtRQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxLQUFLLEdBQUcsb0JBQVksQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixNQUFNLDBCQUEwQixHQUFHLElBQUksdURBQTBCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRyxNQUFNLFlBQVksR0FBRyxNQUFNLDBCQUEwQixDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDL0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQzlDLE9BQU8s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QWtCLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDbkMsZUFBZSxFQUFFLHFCQUFhLENBQUMsV0FBVztZQUMxQyxVQUFVLEVBQUUsY0FBYztZQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDakIsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3BELENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxHQUFZO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUE1R0QsMENBNEdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBCYXNlS2V5IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVW5zaWduZWRUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3Vuc2lnbmVkVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIEN1cnZlVHlwZSxcbiAgSWNwT3BlcmF0aW9uLFxuICBJY3BQdWJsaWNLZXksXG4gIEljcFRyYW5zYWN0aW9uLFxuICBJY3BUcmFuc2FjdGlvbkRhdGEsXG4gIE9wZXJhdGlvblR5cGUsXG4gIERFRkFVTFRfTUVNTyxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3V0aWxzOiBVdGlscztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4sIHV0aWxzOiBVdGlscykge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl91dGlscyA9IHV0aWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgLy8gVGhlIElDUCBjaGFpbiBzZXRzIGEgbWVtbyBmaWVsZCB3aXRoIGEgZGVmYXVsdCB2YWx1ZSBvZiAwLiBUaGlzIGVuc3VyZXMgY29tcGF0aWJpbGl0eVxuICAgIC8vIGJ5IHNldHRpbmcgdGhlIG1lbW8gdG8gMCBpZiBpdCdzIG5vdCBleHBsaWNpdGx5IHByb3ZpZGVkLlxuICAgIGlmICghdGhpcy5fbWVtbyB8fCB0aGlzLl9tZW1vID09PSB1bmRlZmluZWQgfHwgdGhpcy5fbWVtbyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fbWVtbyA9IERFRkFVTFRfTUVNTztcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uKHRoaXMuX3RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmJ1aWxkSWNwVHJhbnNhY3Rpb25EYXRhKCk7XG4gICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbkJ1aWxkZXIgPSBuZXcgVW5zaWduZWRUcmFuc2FjdGlvbkJ1aWxkZXIodGhpcy5fdHJhbnNhY3Rpb24uaWNwVHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IGF3YWl0IHVuc2lnbmVkVHJhbnNhY3Rpb25CdWlsZGVyLmdldFVuc2lnbmVkVHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGEgPSBwYXlsb2Fkc0RhdGE7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkSWNwVHJhbnNhY3Rpb25EYXRhKCk6IHZvaWQge1xuICAgIGFzc2VydCh0aGlzLl9zZW5kZXIsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3NlbmRlciBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KHRoaXMuX3B1YmxpY0tleSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignc2VuZGVyIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9hbW91bnQsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2Ftb3VudCBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KHRoaXMuX3JlY2VpdmVySWQsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3JlY2VpdmVyIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcblxuICAgIGNvbnN0IHB1YmxpY0tleTogSWNwUHVibGljS2V5ID0ge1xuICAgICAgaGV4X2J5dGVzOiB0aGlzLl9wdWJsaWNLZXksXG4gICAgICBjdXJ2ZV90eXBlOiBDdXJ2ZVR5cGUuU0VDUDI1NksxLFxuICAgIH07XG5cbiAgICBjb25zdCBzZW5kZXJPcGVyYXRpb246IEljcE9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6IE9wZXJhdGlvblR5cGUuVFJBTlNBQ1RJT04sXG4gICAgICBhY2NvdW50OiB7IGFkZHJlc3M6IHRoaXMuX3NlbmRlciB9LFxuICAgICAgYW1vdW50OiB7XG4gICAgICAgIHZhbHVlOiBgLSR7dGhpcy5fYW1vdW50fWAsXG4gICAgICAgIGN1cnJlbmN5OiB7XG4gICAgICAgICAgc3ltYm9sOiB0aGlzLl9jb2luQ29uZmlnLmZhbWlseSxcbiAgICAgICAgICBkZWNpbWFsczogdGhpcy5fY29pbkNvbmZpZy5kZWNpbWFsUGxhY2VzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVjZWl2ZXJPcGVyYXRpb246IEljcE9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6IE9wZXJhdGlvblR5cGUuVFJBTlNBQ1RJT04sXG4gICAgICBhY2NvdW50OiB7IGFkZHJlc3M6IHRoaXMuX3JlY2VpdmVySWQgfSxcbiAgICAgIGFtb3VudDoge1xuICAgICAgICB2YWx1ZTogdGhpcy5fYW1vdW50LFxuICAgICAgICBjdXJyZW5jeToge1xuICAgICAgICAgIHN5bWJvbDogdGhpcy5fY29pbkNvbmZpZy5mYW1pbHksXG4gICAgICAgICAgZGVjaW1hbHM6IHRoaXMuX2NvaW5Db25maWcuZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGZlZU9wZXJhdGlvbjogSWNwT3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogT3BlcmF0aW9uVHlwZS5GRUUsXG4gICAgICBhY2NvdW50OiB7IGFkZHJlc3M6IHRoaXMuX3NlbmRlciB9LFxuICAgICAgYW1vdW50OiB7XG4gICAgICAgIHZhbHVlOiB0aGlzLl91dGlscy5mZWVEYXRhKCksXG4gICAgICAgIGN1cnJlbmN5OiB7XG4gICAgICAgICAgc3ltYm9sOiB0aGlzLl9jb2luQ29uZmlnLmZhbWlseSxcbiAgICAgICAgICBkZWNpbWFsczogdGhpcy5fY29pbkNvbmZpZy5kZWNpbWFsUGxhY2VzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlZFRpbWVzdGFtcCA9IHRoaXMuX3RyYW5zYWN0aW9uLmNyZWF0ZWRUaW1lc3RhbXA7XG4gICAgY29uc3QgeyBtZXRhRGF0YSwgaW5ncmVzc0VuZFRpbWUgfSA9IHRoaXMuX3V0aWxzLmdldE1ldGFEYXRhKHRoaXMuX21lbW8sIGNyZWF0ZWRUaW1lc3RhbXAsIHRoaXMuX2luZ3Jlc3NFbmQpO1xuXG4gICAgY29uc3QgaWNwVHJhbnNhY3Rpb246IEljcFRyYW5zYWN0aW9uID0ge1xuICAgICAgcHVibGljX2tleXM6IFtwdWJsaWNLZXldLFxuICAgICAgb3BlcmF0aW9uczogW3NlbmRlck9wZXJhdGlvbiwgcmVjZWl2ZXJPcGVyYXRpb24sIGZlZU9wZXJhdGlvbl0sXG4gICAgICBtZXRhZGF0YTogbWV0YURhdGEsXG4gICAgfTtcbiAgICBjb25zdCBpY3BUcmFuc2FjdGlvbkRhdGE6IEljcFRyYW5zYWN0aW9uRGF0YSA9IHtcbiAgICAgIHNlbmRlckFkZHJlc3M6IHRoaXMuX3NlbmRlcixcbiAgICAgIHJlY2VpdmVyQWRkcmVzczogdGhpcy5fcmVjZWl2ZXJJZCxcbiAgICAgIGFtb3VudDogdGhpcy5fYW1vdW50LFxuICAgICAgZmVlOiB0aGlzLl91dGlscy5mZWVEYXRhKCksXG4gICAgICBzZW5kZXJQdWJsaWNLZXlIZXg6IHRoaXMuX3B1YmxpY0tleSxcbiAgICAgIHRyYW5zYWN0aW9uVHlwZTogT3BlcmF0aW9uVHlwZS5UUkFOU0FDVElPTixcbiAgICAgIGV4cGlyeVRpbWU6IGluZ3Jlc3NFbmRUaW1lLFxuICAgICAgbWVtbzogdGhpcy5fbWVtbyxcbiAgICB9O1xuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uaWNwVHJhbnNhY3Rpb25EYXRhID0gaWNwVHJhbnNhY3Rpb25EYXRhO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmljcFRyYW5zYWN0aW9uID0gaWNwVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHNpZ25hdHVyZXMgPSB0aGlzLl91dGlscy5nZXRTaWduYXR1cmVzKHRoaXMuX3RyYW5zYWN0aW9uLnBheWxvYWRzRGF0YSwgdGhpcy5fcHVibGljS2V5LCBrZXkua2V5KTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnbmF0dXJlcyk7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG59XG4iXX0=

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


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