PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-cspr/dist/src/lib
Просмотр файла: delegateBuilder.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DelegateBuilder = void 0;
const casper_js_sdk_1 = require("casper-js-sdk");
const sdk_core_1 = require("@bitgo/sdk-core");
const transactionBuilder_1 = require("./transactionBuilder");
const constants_1 = require("./constants");
const utils_1 = require("./utils");
class DelegateBuilder extends transactionBuilder_1.TransactionBuilder {
/**
* Public constructor.
*
* @param {CoinConfig} _coinConfig Coin configuration object
*/
constructor(_coinConfig) {
super(_coinConfig);
this._action = constants_1.DELEGATE_CONTRACT_ACTION;
this._contract = Uint8Array.from(Buffer.from(utils_1.casperContractHexCode, 'hex'));
}
/** @inheritdoc */
async buildImplementation() {
this._validator = this._validator || constants_1.DELEGATE_VALIDATOR_ACCOUNT;
const args = this.buildDelegateParameters();
const extraArguments = new Map();
extraArguments.set(constants_1.TRANSACTION_TYPE, casper_js_sdk_1.CLValueBuilder.string(sdk_core_1.TransactionType[sdk_core_1.TransactionType.StakingLock]));
extraArguments.set(constants_1.STAKING_TYPE, casper_js_sdk_1.CLValueBuilder.string(sdk_core_1.StakingOperationTypes[sdk_core_1.StakingOperationTypes.LOCK]));
extraArguments.set(constants_1.DELEGATE_FROM_ADDRESS, casper_js_sdk_1.CLValueBuilder.string(this._source.address));
extraArguments.set(constants_1.DELEGATE_VALIDATOR, casper_js_sdk_1.CLValueBuilder.string(this._validator));
this._session = {
moduleBytes: this._contract,
args: casper_js_sdk_1.RuntimeArgs.fromMap(args),
extraArguments: extraArguments,
};
this.transaction.setTransactionType(sdk_core_1.TransactionType.StakingLock);
return await super.buildImplementation();
}
/** @inheritdoc */
initBuilder(tx) {
super.initBuilder(tx);
this.transaction.setTransactionType(sdk_core_1.TransactionType.StakingLock);
this.validator((0, utils_1.getValidatorAddress)(tx.casperTx.session));
this.amount((0, utils_1.getTransferAmount)(tx.casperTx.session));
}
/** @inheritdoc */
signImplementation(key) {
if (this._multiSignerKeyPairs.length >= transactionBuilder_1.DEFAULT_M) {
throw new sdk_core_1.SigningError('A maximum of ' + transactionBuilder_1.DEFAULT_M + ' can sign the transaction.');
}
return super.signImplementation(key);
}
/**
* Build args needed to create a session, then we can send this session with the contract
*
* @returns {DelegateUndelegateContractArgs} contracts args to create a session
*/
buildDelegateParameters() {
const delegator = casper_js_sdk_1.CLPublicKey.fromHex(this._source.address);
const validator = casper_js_sdk_1.CLPublicKey.fromHex(this._validator);
return {
action: casper_js_sdk_1.CLValueBuilder.string(this._action),
delegator: casper_js_sdk_1.CLValueBuilder.publicKey(delegator.value(), delegator.tag),
validator: casper_js_sdk_1.CLValueBuilder.publicKey(validator.value(), validator.tag),
amount: casper_js_sdk_1.CLValueBuilder.u512(this._amount),
};
}
// region Transfer fields
/**
* Set the destination address where the funds will be sent,
*
* @param {string} address the 68 bits address to transfer funds to
* @returns {DelegateBuilder} the builder with the new parameter set
*/
validator(address) {
if (!(0, utils_1.isValidAddress)(address)) {
throw new sdk_core_1.InvalidParameterValueError('Invalid address');
}
this._validator = address;
return this;
}
/**
* Set the amount to be transferred
*
* @param {string} amount amount to transfer
* @returns {DelegateBuilder} the builder with the new parameter set
*/
amount(amount) {
if (!(0, utils_1.isValidDelegateAmount)(amount)) {
throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
}
this._amount = amount;
return this;
}
// endregion
// region Validators
/**
* Validate mandatory fields in the class
*
* @throws {Error} In case of missing or invalid fields
*/
validateMandatoryFields() {
if (!this._amount) {
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing amount');
}
if (!(0, utils_1.isValidDelegateAmount)(this._amount)) {
throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
}
super.validateMandatoryFields();
}
}
exports.DelegateBuilder = DelegateBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZWxlZ2F0ZUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQStGO0FBRS9GLDhDQU95QjtBQUN6Qiw2REFBcUU7QUFFckUsMkNBT3FCO0FBQ3JCLG1DQU1pQjtBQUdqQixNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBTXJEOzs7O09BSUc7SUFDSCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUF3QixDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLHNDQUEwQixDQUFDO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQzVDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBRWxELGNBQWMsQ0FBQyxHQUFHLENBQUMsNEJBQWdCLEVBQUUsOEJBQWMsQ0FBQyxNQUFNLENBQUMsMEJBQWUsQ0FBQywwQkFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRyxjQUFjLENBQUMsR0FBRyxDQUFDLHdCQUFZLEVBQUUsOEJBQWMsQ0FBQyxNQUFNLENBQUMsZ0NBQXFCLENBQUMsZ0NBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNHLGNBQWMsQ0FBQyxHQUFHLENBQUMsaUNBQXFCLEVBQUUsOEJBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9B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QUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWTtJQUVaLG9CQUFvQjtJQUVwQjs7OztPQUlHO0lBQ0gsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFBLDZCQUFxQixFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0NBRUY7QUF0SEQsMENBc0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IENMVmFsdWUsIENMUHVibGljS2V5IGFzIFB1YmxpY0tleSwgUnVudGltZUFyZ3MsIENMVmFsdWVCdWlsZGVyIH0gZnJvbSAnY2FzcGVyLWpzLXNkayc7XG5cbmltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IsXG4gIFNpZ25pbmdFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBTdGFraW5nT3BlcmF0aW9uVHlwZXMsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIsIERFRkFVTFRfTSB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBUUkFOU0FDVElPTl9UWVBFLFxuICBERUxFR0FURV9WQUxJREFUT1IsXG4gIERFTEVHQVRFX0ZST01fQUREUkVTUyxcbiAgU1RBS0lOR19UWVBFLFxuICBERUxFR0FURV9DT05UUkFDVF9BQ1RJT04sXG4gIERFTEVHQVRFX1ZBTElEQVRPUl9BQ0NPVU5ULFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBpc1ZhbGlkRGVsZWdhdGVBbW91bnQsXG4gIGlzVmFsaWRBZGRyZXNzLFxuICBnZXRUcmFuc2ZlckFtb3VudCxcbiAgZ2V0VmFsaWRhdG9yQWRkcmVzcyxcbiAgY2FzcGVyQ29udHJhY3RIZXhDb2RlLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERlbGVnYXRlVW5kZWxlZ2F0ZUNvbnRyYWN0QXJncyB9IGZyb20gJy4vaWZhY2VzJztcblxuZXhwb3J0IGNsYXNzIERlbGVnYXRlQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgX3ZhbGlkYXRvcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3Rpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfYW1vdW50OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyYWN0OiBVaW50OEFycmF5O1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gX2NvaW5Db25maWcgQ29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKi9cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2FjdGlvbiA9IERFTEVHQVRFX0NPTlRSQUNUX0FDVElPTjtcbiAgICB0aGlzLl9jb250cmFjdCA9IFVpbnQ4QXJyYXkuZnJvbShCdWZmZXIuZnJvbShjYXNwZXJDb250cmFjdEhleENvZGUsICdoZXgnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMuX3ZhbGlkYXRvciA9IHRoaXMuX3ZhbGlkYXRvciB8fCBERUxFR0FURV9WQUxJREFUT1JfQUNDT1VOVDtcbiAgICBjb25zdCBhcmdzID0gdGhpcy5idWlsZERlbGVnYXRlUGFyYW1ldGVycygpO1xuICAgIGNvbnN0IGV4dHJhQXJndW1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIENMVmFsdWU+KCk7XG5cbiAgICBleHRyYUFyZ3VtZW50cy5zZXQoVFJBTlNBQ1RJT05fVFlQRSwgQ0xWYWx1ZUJ1aWxkZXIuc3RyaW5nKFRyYW5zYWN0aW9uVHlwZVtUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2tdKSk7XG4gICAgZXh0cmFBcmd1bWVudHMuc2V0KFNUQUtJTkdfVFlQRSwgQ0xWYWx1ZUJ1aWxkZXIuc3RyaW5nKFN0YWtpbmdPcGVyYXRpb25UeXBlc1tTdGFraW5nT3BlcmF0aW9uVHlwZXMuTE9DS10pKTtcbiAgICBleHRyYUFyZ3VtZW50cy5zZXQoREVMRUdBVEVfRlJPTV9BRERSRVNTLCBDTFZhbHVlQnVpbGRlci5zdHJpbmcodGhpcy5fc291cmNlLmFkZHJlc3MpKTtcbiAgICBleHRyYUFyZ3VtZW50cy5zZXQoREVMRUdBVEVfVkFMSURBVE9SLCBDTFZhbHVlQnVpbGRlci5zdHJpbmcodGhpcy5fdmFsaWRhdG9yKSk7XG5cbiAgICB0aGlzLl9zZXNzaW9uID0ge1xuICAgICAgbW9kdWxlQnl0ZXM6IHRoaXMuX2NvbnRyYWN0LFxuICAgICAgYXJnczogUnVudGltZUFyZ3MuZnJvbU1hcChhcmdzKSxcbiAgICAgIGV4dHJhQXJndW1lbnRzOiBleHRyYUFyZ3VtZW50cyxcbiAgICB9O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jayk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrKTtcbiAgICB0aGlzLnZhbGlkYXRvcihnZXRWYWxpZGF0b3JBZGRyZXNzKHR4LmNhc3BlclR4LnNlc3Npb24pKTtcbiAgICB0aGlzLmFtb3VudChnZXRUcmFuc2ZlckFtb3VudCh0eC5jYXNwZXJUeC5zZXNzaW9uKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgaWYgKHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMubGVuZ3RoID49IERFRkFVTFRfTSkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignQSBtYXhpbXVtIG9mICcgKyBERUZBVUxUX00gKyAnIGNhbiBzaWduIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNpZ25JbXBsZW1lbnRhdGlvbihrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFyZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIHNlc3Npb24sIHRoZW4gd2UgY2FuIHNlbmQgdGhpcyBzZXNzaW9uIHdpdGggdGhlIGNvbnRyYWN0XG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWxlZ2F0ZVVuZGVsZWdhdGVDb250cmFjdEFyZ3N9IGNvbnRyYWN0cyBhcmdzIHRvIGNyZWF0ZSBhIHNlc3Npb25cbiAgICovXG4gIHByaXZhdGUgYnVpbGREZWxlZ2F0ZVBhcmFtZXRlcnMoKTogRGVsZWdhdGVVbmRlbGVnYXRlQ29udHJhY3RBcmdzIHtcbiAgICBjb25zdCBkZWxlZ2F0b3IgPSBQdWJsaWNLZXkuZnJvbUhleCh0aGlzLl9zb3VyY2UuYWRkcmVzcyk7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gUHVibGljS2V5LmZyb21IZXgodGhpcy5fdmFsaWRhdG9yKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb246IENMVmFsdWVCdWlsZGVyLnN0cmluZyh0aGlzLl9hY3Rpb24pLFxuICAgICAgZGVsZWdhdG9yOiBDTFZhbHVlQnVpbGRlci5wdWJsaWNLZXkoZGVsZWdhdG9yLnZhbHVlKCksIGRlbGVnYXRvci50YWcpLFxuICAgICAgdmFsaWRhdG9yOiBDTFZhbHVlQnVpbGRlci5wdWJsaWNLZXkodmFsaWRhdG9yLnZhbHVlKCksIHZhbGlkYXRvci50YWcpLFxuICAgICAgYW1vdW50OiBDTFZhbHVlQnVpbGRlci51NTEyKHRoaXMuX2Ftb3VudCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBUcmFuc2ZlciBmaWVsZHNcbiAgLyoqXG4gICAqIFNldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyB3aGVyZSB0aGUgZnVuZHMgd2lsbCBiZSBzZW50LFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyB0aGUgNjggYml0cyBhZGRyZXNzIHRvIHRyYW5zZmVyIGZ1bmRzIHRvXG4gICAqIEByZXR1cm5zIHtEZWxlZ2F0ZUJ1aWxkZXJ9IHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICB2YWxpZGF0b3IoYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgdGhpcy5fdmFsaWRhdG9yID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFtb3VudCB0byBiZSB0cmFuc2ZlcnJlZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW1vdW50IGFtb3VudCB0byB0cmFuc2ZlclxuICAgKiBAcmV0dXJucyB7RGVsZWdhdGVCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgYW1vdW50KGFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFpc1ZhbGlkRGVsZWdhdGVBbW91bnQoYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFtb3VudCcpO1xuICAgIH1cbiAgICB0aGlzLl9hbW91bnQgPSBhbW91bnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBtYW5kYXRvcnkgZmllbGRzIGluIHRoZSBjbGFzc1xuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSW4gY2FzZSBvZiBtaXNzaW5nIG9yIGludmFsaWQgZmllbGRzXG4gICAqL1xuICB2YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Ftb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBhbW91bnQnKTtcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkRGVsZWdhdGVBbW91bnQodGhpcy5fYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFtb3VudCcpO1xuICAgIH1cbiAgICBzdXBlci52YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxufVxuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!